반응형
▷ 문제 : AVAILABLE LESSONS 4 - MaxCounters (Medium)
▷ 해결 날짜 : 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);
}
▷ 복기 :
효율성이 정말 그냥 문제를 많이 풀어본다고 해결되는 걸까...? 싶은 생각이 든다.
이런 문제에서는 제출하고 나서 아 효율성에서 떨어졌구나 싶은데, 실제 코테에서는 기회가 한 번이라 체크도 안될 텐데 걱정이다.
반응형
댓글