티스토리 뷰

배열 A와 숫자 N이 주어지는데, A[K] 값이 1과 N 사이라면 counter의 X 위치를 1 더하고, A[K] 값이 N+1이면 counter의 최대값으로 모든 값들을 세팅해주는 식으로 해서 배열 A를 돌면서 모든 연산을 처리한 결과를 반환하는 문제.

class Solution {
    public int[] solution(int N, int[] A) {
        int maxVal = 0;
        int prevMaxVal = 0;
        int[] counter = new int[N];
        for (int i = 0; i < A.length; i++) {
            if (A[i] == N + 1) { // N+1이면 최대값으로 모든 배열 setting
                if (prevMaxVal != maxVal) {
                    Arrays.fill(counter, maxVal);
                    prevMaxVal = maxVal;
                }
            } else { // 아닌 경우 counter에 해당 위치 +1 하기
                counter[A[i]-1]++;
                maxVal = Math.max(maxVal, counter[A[i]-1]);
            }
        }
        return counter;
    }
}

이렇게하면 88점이 나온다,, Arrays.fill의 횟수를 최소한으로 해야할 거 같다.

class Solution {
    public int[] solution(int N, int[] A) {
        int[] counter = new int[N];
        int tmpMaxCounter = 0;
        int doneMaxCounter = 0;
        for (int i = 0; i < A.length; i++) {
            // MAX COUNTER 처리 여부
            if (A[i] > N) {
            	// 일단 한 걸로 치고 그 값을 담아둔 뒤
                doneMaxCounter = tmpMaxCounter;
            } else {
                // 연산하기 전에 maxCount를 보고 작으면 maxCount로 세팅 먼저해준다
                if (counter[A[i] - 1] < doneMaxCounter) {
                    counter[A[i] - 1] = doneMaxCounter;
                }
                // 매번 최대값을 저장
                tmpMaxCounter = Math.max(tmpMaxCounter, ++counter[A[i] - 1]);
            }
        }
        if (doneMaxCounter > 0) {
            for (int i = 0; i < counter.length; i++) {
            	// doneMaxCounter보다 작은 애들은 그 값으로 세팅
                if (counter[i] < doneMaxCounter) {
                    counter[i] = doneMaxCounter;
                }
            }
        }
        return counter;
    }
}

다른 풀이를 참고해서 위와 같이 해결했다.

Arrays.fill 연산 (max counter) 이 아무래도 모든 배열을 다 돌면서 처리하는 방식이라 시간이 많이 걸려서 마지막에 한번 수행하는 식으로 풀어냈다. 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함