https://app.codility.com/programmers/lessons/4-counting_elements/max_counters/
처음에 A 인덱스 값이 결과 배열 인덱스 값보다 클 때 전체 값을 ++ 해줬다.
근데 테스트에서 오류 케이스가 발생했다.
두번째는 temp와 max 변수를 생성했다.
A 인덱스 값이 결과 배열에 존재하는 경우 ++를 해주고 temp보다 A 인덱스 값이 크면 temp를 교체해줬다.
그리고 A 인덱스 값이 결과 배열 인덱스보다 큰 경우는 max를 temp값으로 초기화 해줬다.
그 이후 반복문 부터는 만약 max값이 2라고 하면 원래 값이 2가 되어야 하니까 먼저 2로 교체해주고 ++을 해줬다.
근데 결과 배열의 인덱스 값이 max값보다 크거나 같은 경우라면 해당 값은 max값이었기 때문에 굳이 max값으로 교체해줄 필요가 없다 ++만 해주면 된다.
설명이 복잡하지만 내 머리속으로 이해가 완벽히 됐는데 설명하기가 힘들다.
public int[] solution(int N, int[] A) {
int[] answer = new int[N];
int maxCounter = 0;
int tempCounter = 0;
for (int i = 0; i < A.length; i++) {
if (A[i] > N) {
maxCounter = tempCounter;
} else {
if (answer[A[i] - 1] < maxCounter) {
answer[A[i]-1] = maxCounter;
}
answer[A[i]-1]++;
if (tempCounter < answer[A[i]-1]) {
tempCounter = answer[A[i]-1];
}
}
}
for (int j = 0; j < answer.length; j++) {
if (answer[j] < maxCounter) {
answer[j] = maxCounter;
}
}
return answer;
}