비트를 쪼개는 개발자

allen321@naver.com

코딩테스트

C# [프로그래머스] Lv.2 귤 고르기

MozarTnT 2024. 8. 2. 13:39
728x90
반응형

 

 

 

 

 

이번 문제의 핵심은 간단하다.

 

 

  • 경화가 고르고 싶은 귤의 갯수가 k이고 tangerine[] 배열이 각각의 크기의 귤의 종류이다.
  • 귤을 각각의 크기별로 갯수를 센다.
  • 모든 귤을 Count 한 후에 많은 순서대로 내림차순 배치한다. (귤의 크기는 여기서 중요치 않다.)
  • 많은 수의 귤 부터 귤을 다시 Count한다.
  • 반복문을 돌리다가 귤의 갯수가 k보다 크거나 같아지면 종료한다.
  • 몇 종류의 귤을 count 했는지 return한다.

 

 public int solution(int k, int[] tangerine)
 {
     // 귤의 크기별로 개수를 세기 위해 Dictionary 사용
     Dictionary<int, int> countDict = new Dictionary<int, int>();

     for (int i = 0; i < tangerine.Length; i++)
     {
         // 이미 해당 크기가 Dictionary에 있으면 개수 증가
         if (countDict.ContainsKey(tangerine[i]))
             countDict[tangerine[i]]++;
         else // 해당 크기가 없으면 새로 추가하고 개수를 1로 설정
             countDict[tangerine[i]] = 1;
     }

     // 리스트 선언 및 Dictionary의 값 추가
     List<int> counts = new List<int>();
     var values = countDict.Values.ToList(); // Dictionary의 값을 리스트로 변환

     for (int i = 0; i < values.Count; i++)
     {
         counts.Add(values[i]);
     }

     // 내림차순으로 정렬
     counts.Sort();
     counts.Reverse();

     int selectedCount = 0; // 선택한 귤의 총 개수를 저장할 변수
     int typesCount = 0; // 선택한 귤의 종류 수를 저장할 변수

     // 가장 많은 개수부터 차례대로 선택
     for (int i = 0; i < counts.Count; i++)
     {
         selectedCount += counts[i]; // 현재 종류의 귤 개수를 추가
         typesCount++; // 종류 수 증가
         if (selectedCount >= k) // 만약 선택한 귤의 총 개수가 k 이상이면 종료
             break;
     }

     return typesCount; // 최종적으로 선택한 귤의 종류 수 반환
 }

 

 

 

728x90
반응형