문제풀이/기타

[JAVA] Pro 롤케이크 자르기

승무_ 2023. 7. 24. 16:52

문제

https://school.programmers.co.kr/learn/courses/30/lessons/132265?language=java 

 

프로그래머스

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

programmers.co.kr

코드

class Solution {
    public int solution(int[] topping) {
        int answer = 0;
        
        // index: topping 원소, value: 해당 원소 개수
        int[] dp1=new int[10001];
        int[] dp2=new int[10001];
        
        // 토핑 종류의 수
        int count1=0;
        int count2=0;
        
        // 철수가 첫번째 조각, 동생이 나머지 전부 가지게 초기화
        dp1[topping[0]]++;
        count1++;
        for(int i=1; i<topping.length; i++){
            dp2[topping[i]]++;
            if(dp2[topping[i]]==1){
                count2++;
            }
        }

        // topping을 한개씩 순회하며 동생이 가지고 있던걸 형에게 전달
        for(int i=1; i<topping.length; i++){
            dp1[topping[i]]++;
            if(dp1[topping[i]]==1){
                count1++;
            }
            dp2[topping[i]]--;
            if(dp2[topping[i]]==0){
                count2--;
            }
            // 종류의 개수가 같아지면 answer++
            if(count1==count2) answer++;
        }
        
        return answer;
    }
}