백준 15552번 빠른 A+B 문제 node.js 풀이입니다.
[node.js] 백준 15552번 빠른 A+B
반복문 시 입출력 방식에 따른 시간초과 문제
단계별 문제에서 시간초과를 고려한 첫 문제이다.
반복문 사이클 마다 출력
const fs = require("fs");
let input = fs
.readFileSync('/dev/stdin') // boj: '/dev/stdin'
.toString()
.split("\n");
const count = parseInt(input[0]);
function solution() {
for (let i = 1; i < count + 1; i++) {
const nums = input[i].split(" ");
const firstNum = parseInt(nums[0]);
const secondNum = parseInt(nums[1]);
console.log(firstNum + secondNum);
}
}
solution();

반복문 사이클 마다 출력문이 있어 시간 초과 발생
한 문자열에 결과 저장 후 한번에 출력
const fs = require("fs");
let input = fs
.readFileSync('/dev/stdin') // boj: '/dev/stdin'
.toString()
.split("\n");
const count = parseInt(input[0]);
let answer = "";
function solution() {
for (let i = 1; i < count + 1; i++) {
const nums = input[i].split(" ");
const firstNum = parseInt(nums[0]);
const secondNum = parseInt(nums[1]);
const sum = firstNum + secondNum;
answer += `${sum}\n`;
}
console.log(answer);
}
solution();

통과!
그렇다면 두 코드의 실행시간 차이는 어떨까?
실행 시간 비교 (입력 개수 별 실행 시간 차이 테스트)
입력 5개 시 실행 시간 테스트 (반복문 사이클 마다 출력)
const fs = require("fs");
let input = fs
.readFileSync(__dirname + "/input.txt") // boj: '/dev/stdin'
.toString()
.split("\n");
const count = parseInt(input[0]);
function solution() {
const start = new Date();
for (let i = 1; i < count + 1; i++) {
const nums = input[i].split(" ");
const firstNum = parseInt(nums[0]);
const secondNum = parseInt(nums[1]);
console.log(firstNum + secondNum);
}
console.log(new Date() - start);
}
solution();
실행 시간: 3ms
입력 5개 시 실행 시간 테스트 (문자열에 저장 후 한번에 출력)
const fs = require("fs");
let input = fs
.readFileSync(__dirname + "/input.txt") // boj: '/dev/stdin'
.toString()
.split("\n");
const count = parseInt(input[0]);
let answer = "";
function solution() {
const start = new Date();
for (let i = 1; i < count + 1; i++) {
const nums = input[i].split(" ");
const firstNum = parseInt(nums[0]);
const secondNum = parseInt(nums[1]);
const sum = firstNum + secondNum;
answer += `${sum}\n`;
}
console.log(answer);
console.log(new Date() - start);
}
solution();
실행 시간: 3ms
엥??? 실행 시간이 동일하다. 그렇다면 입력이 더 커지면 어떨까.

백준에서는 최대 입력 개수를 1,000,000개까지 제한하고 있다...
그렇다면 1,000,000까지 테스트해보자!
마무리
입력수(개) | 반복문 사이클 마다 출력(ms) | 한번에 출력(ms) |
5 | 3 | 3 |
100 | 15 | 3 |
1000 | 38 | 5 |
10000 | 558 | 41 |
100000 | 2886 | 159 |
1000000 | 16298 | 1127 |
입력 개수가 적을 땐 비슷하다가
백만개의 입력에선 무려 14배 이상의 실행시간 차이가 발생하게 된다...!!
반복문 사용 시 입출력으로 인한 시간초과를 고려하며 코드를 설계하자
'IT > 알고리즘' 카테고리의 다른 글
[node.js] 백준 14681번 사분면 고르기 (0) | 2022.07.27 |
---|---|
[node.js] 백준 9498번 시험 성적 (0) | 2022.07.27 |
[node.js] 백준 25083번 새싹 (0) | 2022.07.26 |