티스토리 뷰

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

무조건 롤케이크는 2개로 쪼개진다는 것이 핵심인 문제이다.

이런식으로 쪼갰을때, X안에 들어있는 토핑의 종류와 Y안에 들어있는 토핑의 종류가 같아야 한다. 
그러면, 앞에서 부터 쭉 밀자. 모든 토핑을 동생에게 먼저주고, 나는 앞에서 부터 토핑을 하나씩 추가하면 된다.

그런데, 토핑의 '개수'가 아닌 '종류'가 중요하다고 한다. 그래서 Map으로 토핑별 개수를 관리하고, 앞에서 탐색을 진행할대마다, 2개의 map에 존재하는 key개수가 서로 일치하는지 확인하면 된다.

 

import java.util.*;

class Solution {
    
    private final Map<Integer, Integer> A = new HashMap<>();
    private final Map<Integer, Integer> B = new HashMap<>();
    
    public int solution(int[] topping) {
        int answer = 0;
        makingSumB(topping);
        System.out.println(B);
        
        for (int i=0; i<topping.length; i++) {
            int t = topping[i];
            if(B.get(t) == 1) B.remove(t);
            else B.put(t, B.get(t)-1);
            if(A.get(t) == null) A.put(t, 1);
            else A.put(t, A.get(t) + 1);
            
            if (isEqualSize()) answer++;
        }
        return answer;
    }
    
    private void makingSumB(int[] topping) {
        for(int i=0; i<topping.length; i++) {
            int t = topping[i];
            if (B.get(t) == null) {
                B.put(t, 1);
            }
            else B.put(t, B.get(t) + 1);
        }
    }
    
    private boolean isEqualSize() {
        return A.size() == B.size();
    }
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함