curMax값을 할당한 이후 increase()연산을 수행하면 해결되는 문제였다.

문제를 이해하는데 시간이 점점 많이 걸리고있다.

영어로 쓰여있는것도 있지만 예제 먼저 보고 문제의 의미를 알려고 하다보니 예외적인 상황이나 리턴값을 다르게 하는경우는

잘못 대처하는 실수를 종종 해서 다시 짜는 경우도 있다. 주의해야겠다.

class Solution {
    public int[] solution(int N, int[] A) {
        // write your code in Java SE 8
        int B[] = new int [N];
        int counter = 0;
        
        for(int i=0; i<B.length; i++){
            B[i] = 0;
        }
        
        for(int i=0 ; i<A.length ; i++){
            
            if(A[i]==N+1){
                for(int j=0; j<B.length; j++){
                    B[j] = counter;
                }
            } else {
                B[A[i]-1] ++;
                counter = Math.max(B[A[i]-1],counter);
            }
        }
        return B;
    }
}

내가 푼 방식은
A[i]가 N+1이 아닐 경우 0으로 초기화된 배열의 원소를 1증가 시키고
0으로 초기화된 counter 변수와 1증가된 원소를 비교해 counter를 갱신시키는 것이었다.

A[i]가 N+1에 해당하는 원소일 경우
배열의 모든 원소를 위에서 갱신된 counter변수로 바꾸는것으로 문제를 풀었다.

점수는 정확도 100%에 퍼포먼스가 60% 였다.
배열의 모든수가 maxcounter일 경우 B배열을 counter값으로 채우는 과정에서
TIMEOUTERROR가 났다.

문제가 된 부분은 maxcounter인 N+1에 걸릴 경우인데
이걸 해결하기 위해서는 현재 B배열의 최댓값 설정 (curMax)해두고
for문이 끝나고 난뒤의 마지막 과정에서 B배열의 원소중 저장된 최댓값(curMax)보다 작은 값들을
curMax값으로 바꿔주면 되는 방식이다.

처음 이 방식을 접했을때는 마지막의 curMax값 할당과정을 수행하게되면
“그전의 연산들 (예제에서는 6이후에 나오는 1,4,4가 해당한다)을 수행한것 까지도 curMax값으로 바뀌지 않나?” 라고 생각했는데

else부분에서 curMax값보다 작은 원소들은
curMax값을 할당한 이후 increase()연산을 수행하면 해결되는 문제였다.

100% 코드