문제 상황
제출한 코드가 시간 초과로 통과되지 않습니다.
글 읽기 - [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 호출 횟수 줄였음에도 시간 초과가 발생한다면 시간 복잡도 측면에서 개선하여야 합니다.
'크고 작은 문제들' 카테고리의 다른 글
[TypeScript] 배열 요소에 대한 타입 추론 (0) | 2023.08.17 |
---|---|
[React] JavaScript로 작성된 카카오 지도를 TypeScript로 포팅하기 (0) | 2023.08.03 |
[Ubuntu] Window에서 열리는 VS Code (0) | 2023.07.08 |
[node.js] replaceAll is not a function (0) | 2023.06.17 |
[React + Jest] 두 번째 테스트 케이스부터 컴포넌트를 찾을 수 없는 문제(자동 cleanup) (0) | 2023.06.13 |