[Java] MaxCounter

urzi·2021년 8월 28일
0

코딩테스트

목록 보기
12/20

문제

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;
    }
profile
Back-end Developer

0개의 댓글