






















즉,
N = 5
A[0] = 3
A[1] = 4
A[2] = 4
A[3] = 6
A[4] = 1
A[5] = 4
A[6] = 4
이러한 N과 A 배열이 주어졌다면,
A[2]까지 순회 했을 때 3은 1번, 4는 2번 카운트 되었으므로
(0, 0, 1, 2, 0)이 반환되어야 하고,
이후 A[3]까지 순회 했을 때는 6 = N + 1에 해당하므로 모든 값에 대한 가장 높은 카운트
수인 2로 일괄 변경하여
(2, 2, 2, 2, 2)가 반환되어야 함.
이를 처리하는 가장 효율적인 알고리즘 작성
이 요구사항으로 구현을 하고 제출했으나... 스코어 77%... 또르르...
large_random2과 extream_large 케이스에서 Timeout이 발생했다.
function solution(N, A) {
const counter = new Array(N).fill(0);
let maxCounter = 0;
A.forEach( item => {
let idx = item - 1;
if(item <= N) {
counter[idx] += 1;
maxCounter = Math.max(maxCounter, counter[idx]);
}
else
counter.fill(maxCounter)
})
return counter
}
어디서 문제일까 되짚어 봤을 때, 아무래도
counter.fill(maxCounter) 이 부분에서
timeout을 일으킨듯 보여서 이 부분을 개선해보기로.
그리고 이렇게 해서 100% 달성!
function solution(N, A) {
const counter = new Array(N).fill(0);
let maxCounter = 0;
let tmpMaxCounter = 0;
A.forEach( (item) => {
let idx = item - 1;
if( item <= N) {
counter[idx] = Math.max(counter[idx], maxCounter);
counter[idx] += 1;
tmpMaxCounter = Math.max(counter[idx], tmpMaxCounter);
}else{
maxCounter = tmpMaxCounter;
}
});
counter.forEach( (item, idx, arr) => {
arr[idx] = Math.max(item, maxCounter);
})
return counter
}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。