https://school.programmers.co.kr/learn/courses/30/lessons/132265
풀이
음.. 한 개의 커서가 있고 먼저 중복제거를 한 총 개수를 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;
}
}
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 호텔 대실 (0) | 2023.07.04 |
---|---|
[프로그래머스] 카카오 기출 - 양궁대회 (0) | 2023.07.04 |
[프로그래머스] 혼자 놀기의 달인 (0) | 2023.06.20 |
[프로그래머스] 카카오 기출 - n진수 게임 (0) | 2023.06.20 |
[프로그래머스] - 뒤에 있는 큰 수 찾기(LV2) java (2) | 2023.05.14 |