카테고리 없음

[프로그래머스] 귤 고르기 (Java, Python)

garamdev 2026. 9. 7.
728x90

문제

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

코드(Java)

import java.util.*;

class Solution {
    public int solution(int k, int[] tangerine) {
        // 1. 각 크기별로 몇 개씩 있는지 세어서 Map에 저장
        Map<Integer, Integer> countMap = new HashMap<>();
        for (int size : tangerine) {
            countMap.put(size, countMap.getOrDefault(size, 0) + 1);
        }
        
        // 2. Map에 저장된 '개수(Value)'만 모두 뽑아서 리스트로 만듦
        List<Integer> counts = new ArrayList<>(countMap.values());
        
        // 3. 귤이 많은 묶음부터 보기 위해 내림차순 정렬 (큰 수 -> 작은 수)
        counts.sort(Collections.reverseOrder());
        
        int answer = 0;
        // 4. 개수가 많은 묶음부터 상자에 넣기 시작
        for (int count : counts) {
            // 이미 k개를 다 채웠으면 종료
            if (k <= 0) break;
            
            // 이번 크기의 귤을 모두 상자에 넣음;
            k -= count;
            // 서로 다른 크기 종류를 하나 사용했으므로 +1
            answer++;
        }
        return answer;
    }
}
  • `Map<Integer, Integer> countMap = new HashMap<>();`
    → (키=귤크기, 값=개수)를 저장할 빈 맵을 만듦
  • `for (int size : tangerine) { ... }`
    → 귤 배열 `[1, 3, 2, 5, 4, 5, 2, 3]`을 하나씩 꺼냄
    • `countMap.getOrDefault(size,0)  + 1`
      : 만약 맵에 해당 크기가 없으면 0을, 있으면 기존 개수를 꺼내서 +1
    • `countMap.put(...)`으로 다시 저장

코드(Python)

from collections import Counter

def solution(k, tangerine):
    # 1. 각 크기별 개수를 세고, 개수(Value)만 뽑아서 리스트로 만듦
    counts = list(Counter(tangerine).values())
    
    # 2. 개수가 많은 순서대로 정렬 (내림차순)
    counts.sort(reverse=True)
    
    answer = 0
    # 3. 개수가 많은 묶음부터 상자에 넣기 시작
    for count in counts:
        if k <= 0:  # 다 채웠으면 종료
            break
        k -= count  # 해당 크기 귤을 전부 넣음
        answer += 1 # 종류 개수 증가
        
    return answer
  • `counts = list(Counter(tangerine).values())`
    1. `Counter(tangerine)` → 귤 배열을 보며 {1: 1, 2: 2, 3: 2, 4: 1, 5: 2} 라는 Dictionary를 만듦 (1이 1개, 2가 2개, 3이 2개, 4가 1개, 5가 2개)
    2. `.values()` → Dictionary에서 '개수' 부분만 꺼냄 → `[1, 2, 2, 1, 2]`
    3. `list(...)` → 리스트로 감싸서 → `counts = [2, 2, 2, 1, 1]`