주녘공부일지

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

Programmers - C#/CodingTest Lv.2

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

주녘 2023. 12. 8. 17:30
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/138476

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

1. 정답코드 및 핵심 아이디어, 유의사항

한 상자를 k개의 귤로 채울 때, 크기가 서로 다른 종류의 수의 최소 값을 구하는 문제

- 구하려는 상자는 여러 개가 아닌 단 하나라는 게 핵심

 -> 귤의 크기에 따라 분류하고, 크기에 따라 가장 개수가 많은 귤부터 상자에 담으면 됨

 

- 딕셔너리에 귤의 크기를 key로 하여 개수를 저장

- 리스트에 내림차순 정렬해 개수가 가장 많은 귤부터 상자에 담음

 

주석 참조

    using System;
    using System.Collections.Generic;
    using System.Linq;

    public class Solution
    {
        public int solution(int k, int[] tangerine)
        {
            int answer = 0;
            var dict = new Dictionary<int, int>();

            // 딕셔너리 안에 size별로 담음
            foreach (int size in tangerine)
            {
                if (dict.ContainsKey(size))
                    dict[size]++;
                else
                    dict.Add(size, 1);
            }

            // list에 내림차순 정렬해서 담음 (List안의 자료형은 KeyValuePair<int, int>로 들어감)
            var list = dict.OrderByDescending(x => x.Value).ToList();
            
            // 가장 큰 귤부터 상자에 담음
            for (int i = 0; i < list.Count; i++)
            {
                answer++;
                k -= list[i].Value;
                
                // 상자가 가득 참
                if (k <= 0)
                    break;
            }

            return answer;
        }
    }
728x90