[프로그래머스 C#] Lv.1 체육복 (feat.그리디 알고리즘)

2024. 4. 10. 14:16· C#/프로그래머스 코딩 문제 풀이

1. 문제설명

점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다.
전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution 함수를 작성해주세요.

2. 제한사항

● 전체 학생의 수는 2명 이상 30명 이하입니다.
● 체육복을 도난당한 학생의 수는 1명 이상 n명 이하이고 중복되는 번호는 없습니다.
● 여벌의 체육복을 가져온 학생의 수는 1명 이상 n명 이하이고 중복되는 번호는 없습니다.
● 여벌 체육복이 있는 학생만 다른 학생에게 체육복을 빌려줄 수 있습니다.
● 여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다. 이때 이 학생은 체육복을 하나만 도난당했다고 가정하며, 남은 체육복이 하나이기에 다른 학생에게는 체육복을 빌려줄 수 없습니다.

3. 입출력 예시

n lost  reserve return
5 [2,4] [1,3,5] 5
5 [2,4] [3] 4
3 [3] [1] 2

4. 나의풀이

public int solution3(int n, int[] lost, int[] reserve)
    {
    	//맨처음 수업을 들을 수 있는 상태의 학생 수.
        int answer = n - lost.Length;

		//도난당한 학생과 여벌복 학생 오름차순 정렬.
        Array.Sort(lost);
        Array.Sort(reserve);

        //여벌옷을 가져온 학생이 체육복을 도난당했을 경우.
        foreach (var l in lost)
        {
            foreach (var r in reserve)
            {
                if(l == r)
                {
                    answer++;
                    lost = lost.Where(num => num != l).ToArray();
                    reserve = reserve.Where(num => num != r).ToArray();
                    break;
                }
            }
        }

        //여벌옷이 없는 학생이 체육복을 도난당했을 경우.
        foreach (var l in lost)
        {
            for (int i = 0; i < reserve.Length ; i++)
            {
                if(l == reserve[i]-1 && reserve[i] != 0 || l == reserve[i] + 1 && reserve[i] != 0)
                {
                    answer++;
                    reserve[i] = 0;
                    break;
                }
            }
        }

        return answer;
    }

 

'C# > 프로그래머스 코딩 문제 풀이' 카테고리의 다른 글

[프로그래머스 C#] Lv.2 N개의 최소공배수  (0) 2024.04.16
[프로그래머스 C#] Lv.3 스티커 모으기(2)  (0) 2024.04.15
[프로그래머스 C#] Lv.2 하노이의 탑  (0) 2024.04.09
[프로그래머스 C#] Lv.1 K번째수  (2) 2024.04.01
[프로그래머스 C#] Lv.3 네트워크  (0) 2024.03.26
'C#/프로그래머스 코딩 문제 풀이' 카테고리의 다른 글
  • [프로그래머스 C#] Lv.2 N개의 최소공배수
  • [프로그래머스 C#] Lv.3 스티커 모으기(2)
  • [프로그래머스 C#] Lv.2 하노이의 탑
  • [프로그래머스 C#] Lv.1 K번째수
ForMan_
ForMan_
C# 언어로 프로그래머스 문제를 풀이하고, Unity 엔진으로 게임을 개발하며, 자료구조를 공부하는 과정을 반복문처럼 꾸준히 탐구하고 공유하는 '반복해서 노력하는 남자, ForMan'의 블로그입니다.
ForMan_
반복해서 노력하는 남자, ForMan
ForMan_
전체
오늘
어제
  • 분류 전체보기
    • C#
      • 프로그래머스 코딩 문제 풀이
      • 자료구조 이해하기
      • 알고리즘 기초 익히기
    • Unity
      • Unity 디자인 패턴
      • Unity 타워디펜스게임 프로젝트
      • Unity 물리기반 Merge게임 프로젝트(수박라..
      • Unity FPS게임 프로젝트(오버워치라이크)
    • UI
      • 젠레스존제로 UI작업 시작
      • 젠레스존제로 UI 이펙트 작업
      • 젠레스존제로 UI 사운드 작업
      • 젠레스존제로 UI 스크롤뷰 작업(메뉴창)

블로그 메뉴

  • 홈
  • 방명록
  • 태그

최근 글

최근 댓글

인기 글

태그

  • 게임프로젝트
  • 완전탐색
  • 유니티
  • 정렬알고리즘
  • forman
  • 프로그래머스
  • 오름차순
  • 오버워치
  • 수박게임
  • Unity
  • 오버워치만들기
  • 동적프로그래밍
  • 머쓱이
  • 타워디펜스게임
  • 유니티게임프로젝트
  • c#
  • 유니티게임
  • 유니티디자인패턴
  • 코딩테스트
  • 과일합치기
Thanks for Skin
hELLO · Designed By 정상우.v4.2.2
ForMan_
[프로그래머스 C#] Lv.1 체육복 (feat.그리디 알고리즘)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.