JavaScript 출력 최적화 - 백준에서 console.log() 쓰면 안 되는 이유
2025. 5. 11. 17:46
728x90

JavaScript로 백준 문제를 풀 때 console.log()를 사용하면 시간 초과가 나는 이유

JavaScript로 알고리즘 문제를 풀 때, 특히 백준에서 console.log()를 반복적으로 사용하면 시간 초과(Time Limit Exceeded, TLE)가 발생하는 경우가 많습니다. 그 이유와 해결책을 아래와 같이 정리합니다.


1. 문제의 원인: console.log()는 느린 입출력 방식이다

JavaScript의 console.log()는 본래 개발자 도구용 디버깅 함수입니다. 출력 최적화를 목적으로 설계된 것이 아니라, 가독성과 유연함에 초점이 맞춰져 있습니다.

  • 각 console.log() 호출 시 내부적으로
    • 출력 스트림 처리
    • 문자열 변환 및 줄바꿈 처리
    • flush(출력 버퍼 비우기) 수행 등 부가 비용 발생

결과적으로 수천~수만 번의 호출이 누적되면 출력 처리 자체가 병목이 됩니다.


2. 대표적인 예시 (비효율적인 출력 방식)

for (let i = 1; i <= 100000; i++) {
    console.log(i);  // 시간 초과 발생 가능
}

위처럼 10만 번의 console.log() 호출은 각 줄마다 출력 시스템을 호출하므로 매우 느립니다.


3. 해결책: 출력을 모아서 한 번에 처리하기

 출력 내용을 배열에 모은 뒤, 한 번만 출력

let arr = [];
for (let i = 1; i <= 100000; i++) {
    arr.push(i);
}
console.log(arr.join('\n'));  // 단 한 번만 출력
  • join('\n')으로 줄바꿈 포함된 하나의 문자열 생성
  • console.log()는 단 한 번만 호출 → 시간 초과 방지

4. 그 외 대안

방법 설명

console.log() 디버깅에는 좋지만 반복 호출 성능은 나쁨
process.stdout.write() 더 빠르지만 줄바꿈과 형식 처리가 번거로움
join + 1회 출력 가장 깔끔하고 실용적인 방식 

5. 실전 팁: 언제 이 방식이 필요한가?

  • DFS, BFS, 구현 문제 등에서 많은 수를 출력할 때 (O(N) 이상의 출력)
  • 특히 결과가 한 줄씩 출력될 때는 반드시 출력 모아서 처리할 것
  • 입력 처리 최적화(readFileSync)와 함께 쓰면 훨씬 안정적

 요약

원인 console.log()는 호출마다 출력 시스템 부하가 큼
증상 반복 출력 시 시간 초과 (TLE) 발생
해결 출력을 배열에 모은 후 join('\n')으로 한 번에 출력

백준에서는 console.log()를 남용하지 마세요. 출력도 알고리즘의 일부입니다.

반응형