Algorithm/Programmers

[Lv.2] 롤케이크 자르기 : Java

say! 2026. 6. 11. 17:19
728x90

 

 

프로그래머스

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

programmers.co.kr

 

처음에는 모든 토핑을 왼쪽에 Map에 넣기, 오른쪽 Map은 비워두기

왼쪽 Map에 있는 토핑을 1개씩 오른쪽 Map에 옮기면서 개수 비교하기

개수 size() 같으면 answer++

 

import java.util.*;

class Solution {
    public int solution(int[] topping) {
        int answer = 0;
        
        HashMap<Integer, Integer> left = new HashMap<>();
        HashMap<Integer, Integer> right = new HashMap<>();
        
        // 처음엔 왼쪽에 토핑 다 담아두기
        for(int t : topping){
            left.put(t, left.getOrDefault(t, 0)+1);
        }
        
        // 오른쪽에 토핑 하나씩 옮기면서 개수 비교하기
        for(int i=topping.length-1; i>1; i--){
            int tp = topping[i];
            
            // 오른쪽에 추가
            right.put(tp, right.getOrDefault(tp, 0)+1);
            
            // 왼쪽에서 삭제
            left.put(tp, left.get(tp)-1);
            if(left.get(tp) == 0) left.remove(tp);
            
            // 토핑 개수 비교 > 같으면 경우의 수 ++
            if(right.size() == left.size()) answer++;
        }
        
        return answer;
    }
}