Woozy_DevLog
Published 2023. 5. 16. 17:17
[Lv.2] 귤 고르기 Algorithm/Programmers

문제 설명

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

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

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

문제 풀이

function solution(k, tangerine) {
    var answer = 0;
    let map = new Map()

    for(t of tangerine){
        if(map.has(t)) map.set(t,map.get(t)+1)
        else map.set(t,1)
    }
    
    const sortArr = [... map].sort((a,b) => b[1] - a[1]);
    
    for(let s of sortArr){
        if(k>0){
            k -= s[1]    
            answer++
        }
    }
    
    return answer;
}

해쉬와 정렬을 이용하여 문제를 풀었습니다.

  • 먼저 map을 이용해 각 크기별 귤의 개수를 구한뒤 내림차순 정렬을 했습니다.
    ex) sortArr = [ [ 3(크기 종류), 2(크기 별 귤 개수) ], [ 2, 2 ], [ 5, 2 ], [ 1, 1 ], [ 4, 1 ] ]
  • 상자의 넣을 귤의 개수가 0이 아니라면 귤의 개수를 빼줍니다. 귤을 넣었기 때문에 answer를 증가시켜줍니다.
    k(6) - 크기 3인 귤의 개수 [2] -> k(4) 크기 2인 귤의 개수[2] -> k(2) 크기 5인 귤의 개수[2] -> k(0)
    k가 0이 되어 아무 변경사항이 생기지 않습니다. 넣은 귤의 크기 종류가 3, 2, 5이므로 각 귤을 빼줄 때마다 answer를 증가시켜주는 것이며 답은 3이 됩니다.

'Algorithm > Programmers' 카테고리의 다른 글

[Lv.2] 프로세스  (0) 2023.05.17
[Lv.2] 다음 큰 숫자  (0) 2023.05.10
[Lv.1] 크레인 인형뽑기 게임  (0) 2023.05.09
[Lv.2] 짝지어 제거하기  (0) 2023.05.04
[Lv.2] 올바른 괄호  (0) 2023.05.03
profile

Woozy_DevLog

@Woozy_Dev

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!