Search

    프로그래머스 Lv.2(JS) - 귤 고르기
    2022.12.16 4 min read

    프로그래머스 Lv.2(JS) - 귤 고르기

    문제

    귤 고르기

    문제 설명

    경화는 과수원에서 귤을 수확했습니다. 경화는 수확한 귤 중 k개를 골라 상자 하나에 담아 판매하려고 합니다. 그런데 수확한 귤의 크기가 일정하지 않아 보기에 좋지 않다고 생각한 경화는 귤을 크기별로 분류했을 때 서로 다른 종류의 수를 최소화하고 싶습니다.

    예를 들어, 경화가 수확한 귤 8개의 크기가 [1, 3, 2, 5, 4, 5, 2, 3] 이라고 합시다. 경화가 귤 6개를 판매하고 싶다면, 크기가 1, 4인 귤을 제외한 여섯 개의 귤을 상자에 담으면, 귤의 크기의 종류가 2, 3, 5로 총 3가지가 되며 이때가 서로 다른 종류가 최소일 때입니다.

    경화가 한 상자에 담으려는 귤의 개수 k와 귤의 크기를 담은 배열 tangerine이 매개변수로 주어집니다. 경화가 귤 k개를 고를 때 크기가 서로 다른 종류의 수의 최솟값을 return 하도록 solution 함수를 작성해주세요.


    제한사항

    • 1 ≤ ktangerine의 길이 ≤ 100,000
    • 1 ≤ tangerine의 원소 ≤ 10,000,000

    입출력 예

    ktangerineresult
    6[1, 3, 2, 5, 4, 5, 2, 3]3
    4[1, 3, 2, 5, 4, 5, 2, 3]2
    2[1, 1, 1, 1, 2, 2, 2, 3]1

    정답

    풀이 코드

    function solution(k, tangerine) {
      let result = 0;
      const tangerineTypes = {};
    
      tangerine.forEach((x) => (tangerineTypes[x] ? tangerineTypes[x]++ : (tangerineTypes[x] = 1)));
    
      const tangerines = Object.values(tangerineTypes).sort((a, b) => b - a);
    
      tangerines.forEach((x) => {
        if (k <= 0) return;
        result++;
        k -= x;
      });
    
      return result;
    }

    풀이 설명

    key point
    • 귤 크기별 개수만 비교합니다.
    • 한 상자에 담아야 하는 귤의 개수를 초과해도 상관없습니다.

    function solution(k, tangerine) {
      let result = 0;
      const tangerineTypes = {};
    
      tangerine.forEach((x) => (tangerineTypes[x] ? tangerineTypes[x]++ : (tangerineTypes[x] = 1)));
    
      const tangerines = Object.values(tangerineTypes).sort((a, b) => b - a);
    }

    tangerineTypes에 수확한 귤의 크기(key)별 개수(value)를 저장합니다.

    많이 수확한 크기부터 선택하기 위해 tangerineTypes의 value들만 추출하여 내림차순으로 정렬한 배열 tangerines를 생성합니다.


    function solution(k, tangerine) {
      //...
      tangerines.forEach((x) => {
        if (k <= 0) return;
        result++;
        k -= x;
      });
    
      return result;
    }

    tangerines를 순회하면서 상자에 담고 k(한 상자에 담아야 하는 귤의 개수)에서 담은 귤의 개수만큼을 뺍니다. k가 0 이하이면 필요한 귤 개수를 모두 채운 것이므로 순회를 종료합니다.


    References

    프로그래머스 연습 - 귤 고르기

    TAGS

    Algorithm

    알고리즘 문제 풀이

    2022.12.16
    4 min read

    TAGS

    Algorithm