본문 바로가기
Algorithm/프로그래머스

[프로그래머스] 롤케이크 자르기 - java

by LeeGangEun 2023. 6. 20.

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

 

프로그래머스

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

programmers.co.kr

풀이

음.. 한 개의 커서가 있고 먼저 중복제거를 한 총 개수를 leftCount에 넣어준다.

그리고 left,right 배열을 각각 10000씩 설정하여 할당해준다 (최대 숫자가 10000이기때문에, 최적화를 생각한다면 topping 배열에서 최대값으로 잡아줘도됨) 

그 후 leftNumberCount 배열에 topping 배열을 순회에서 개수를 넣어준다.

그 후 idx 가 0까지 반복하면서 개수가 같으면 answer를 증가시켜주는 식으로 해결 !

import java.util.Arrays;

class Solution {

    public int solution(int[] topping) {
        int rightCount = 0;
        int leftCount = (int) Arrays.stream(topping).distinct().count();

        int[] leftNumberCount = new int[10_001];
        int[] rightNumberCount = new int[10_001];
        for (int i : topping) leftNumberCount[i]++;

        int idx = topping.length;

        int answer = 0;

        while (idx-- > 0) {
            if (--leftNumberCount[topping[idx]] == 0) leftCount--;
            if (rightNumberCount[topping[idx]]++ == 0) rightCount++;
            if (leftCount == rightCount) answer ++;
        }

        return answer;
    }


}