본문 바로가기
Algorithm/문제풀이

[Codility] MaxCounters(Medium) by javascript - AVAILABLE LESSONS 4

by 썸머워즈 2022. 4. 14.
반응형

▷ 문제 : AVAILABLE LESSONS 4 - MaxCounters (Medium)

 

MaxCounters coding task - Learn to Code - Codility

Calculate the values of counters after applying all alternating operations: increase counter by 1; set value of all counters to current maximum.

app.codility.com

▷ 해결 날짜 : 2022.04.14
▷ 소요 시간 : 1시간
▷ 풀이 과정 :

사실문제는 그렇게 어렵지 않다.

코드 리티 특성상 영문으로 된 문제를 해석해보면 배열의 크기 N이 주어지고 두 번째로 규칙이 들어간 숫자로 이루어진 A 배열이 주어진다.

 

A[K] = N + 1 일 경우에는 N 배열의 모든 값이 현재 최댓값으로 전부 변경되며, 그 외에는 각 인덱스에 맞게 하나씩 값을 증가시켜주기만 하면 되는 문제다.

 

역시 가장 큰 문제가 뭐냐면 시간 복잡도이다.

백준과 마찬가지로 항상 효율성을 따지기 때문에 최대한 간단하고 원시적으로 풀게 되었다.

 

처음에는 fill을 적극 활용하여 손쉽게 풀어냈는데 77%에서 넘어가질 못해서 그냥 전부 변수에 담아두고 처리를 하였다.

 

▷ 구현

function solution(N, A) {
    const result = Array(N).fill(0);
    let max = 0;
    let lastmax = 0;
    for(let i = 0; i < A.length ; i++){
        let cur = A[i];
        if(cur == N + 1){
            lastmax = max;
        }else{
            let num = result[cur - 1];
            if(num < lastmax) num = lastmax;
            result[cur - 1] = num + 1;
            if(max < num + 1) max = num + 1;
        }
    }

    return result.map(e => e < lastmax ? lastmax : e);
}


▷ 복기 :

효율성이 정말 그냥 문제를 많이 풀어본다고 해결되는 걸까...? 싶은 생각이 든다.

이런 문제에서는 제출하고 나서 아 효율성에서 떨어졌구나 싶은데, 실제 코테에서는 기회가 한 번이라 체크도 안될 텐데 걱정이다.

반응형


댓글

TOP