크고 작은 문제들

[node.js] 백준 문제풀이 시간초과(console.log)

노새두마리 2023. 6. 17. 03:35

문제 상황

제출한 코드가 시간 초과로 통과되지 않습니다.


 

글 읽기 - [node.js] 10828번 - 스택 / 시간초과

댓글을 작성하려면 로그인해야 합니다.

www.acmicpc.net

답을 출력할 때에 console.log를 호출하는 횟수가 늘어날 수록 프로그램 실행 시간이 급격하게 늘어납니다.

따라서, 배열에 모든 결과를 저장해 두었다가 배열을 join하여 하나의 문자열로 만든 뒤, console.log를 한 번만 호출하여 해결하는 것이 핵심입니다.

const result = [];
// ... result.push()로 결과 저장
console.log(result.join('\n'));

console.log 호출 횟수에 따라 실행 시간에 큰 차이가 발생한다는 사실만 보면 되므로 간단하게 1회만 테스트하도록 하겠습니다. N마다 1000번 반복하여 평균 실행 시간을 구하는 중에 크롬 브라우저 탭이 멈춰서 수정중인 글을 날렸습니다.

const N = 100;

console.time('test');
for (let i = 0; i < N; i++){
    console.log(i);
}
console.timeEnd('test');
const N = 100;

console.time('test');
const result = [];
for (let i = 0; i < N; i++){
    result.push(i);
}
console.log(result.join('\n'));
console.timeEnd('test');
  N = 100 N = 1000 N = 10000
A: console.log(i) * N 1.678ms 13.470ms 129.865ms
B: console.log(result.join('\n')) * 1 0.089ms 0.190ms 0.948ms
A / B 18.85배 70.89배 136.99배

N의 값이 커질수록 실행 시간의 차이는 더욱 커지는 것을 확인할 수 있습니다.

 

※ console.log 호출 횟수 줄였음에도 시간 초과가 발생한다면 시간 복잡도 측면에서 개선하여야 합니다.