본문 바로가기
Beakjoon&프로그래머스/Java

[프로그래머스/Java] 롤케이크 자르기

by 현장 2026. 3. 26.

-Code

import java.util.*;

class Solution {
    public int solution(int[] topping) {
        // 나는 map으로 갯수 관리하고 동생은 set으로 중복 관리
        Map<Integer, Integer> me = new HashMap<>();
        Set<Integer> brother = new HashSet<>();
        for (int t : topping) {
            me.put(t, me.getOrDefault(t, 0) + 1);
        }
        // 종류가 같은지 계산
        int answer = 0;
        for (int i = 0; i < topping.length; i++) {
            // 나의 토핑 갯수 제거
            me.put(topping[i], me.get(topping[i]) - 1);
            // 0개가 남으면 제거
            if (me.get(topping[i]) == 0) {
                me.remove(topping[i]);
            }
            // 나의 토핑을 하나 동생에게 넘기기
            brother.add(topping[i]);
            // 갯수가 같다면 증가
            if (me.size() == brother.size()) {
                answer++;
            }
        }
        return answer;
    }
}

처음에 단순하게 Deque 2개와 Set 2개로 관리하려 했으나 너무 얕게 생각해서 시간 초과였습니다. 그래서 힌트로 받은게 map과 set을 이용해라 였고 활용해 해결했습니다.