본문 바로가기
JS/백준

[백준JS] 15552. 빠른 A+B

by 박기린 2023. 2. 24.

안녕하세요. 박기린 입니다.

백준 15552번 문제를 풀어봅시다.

 

 

문제 링크

https://www.acmicpc.net/problem/15552

 

 

 

 


문제 해석

해당 알고리즘이 요구하는 계산은 매우 간단합니다.

첫 번째 줄의 5는 테스트 케이스의 개수를 뜻하기 때문에 무시하고, 두 번째 줄부터 나오는 두 숫자를 더해준 후 출력하면 됩니다.

다만, 한 가지 중요한 조건이 붙습니다.

 

 

 

 

이 문제는 시간제한이 빡빡합니다.

 

 

 

 

풀이 자체는 맞게 하더라도, 시간 초과로 문제를 틀릴 수 있습니다.

백준 사이트에 적힌 문제에는 시간 초과 문제를 해결할 힌트를 제공해주고 있지만, NodeJS에 대한 힌트는 없습니다. 그러면 NodeJS에서는 어떻게 해야 할까요?

 

 

 

 


정답 코드

const fs = require("fs");

const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
const [count, ...arr] = input;

let result = "";

for (let i = 0; i < count; i++) {
  const item = arr[i].split(" ").map((e) => parseInt(e));
  // console.log(item[0] + item[1]) <- 하나씩 console 찍으니까 오래 걸린다. 
  // 한 번에 모아서 하나의 console로 찍어내자.
  result += `${item[0] + item[1]}\n`;
}

console.log(result);

 

 

 


정답 코드 풀이

NodeJS에서 시간 초과를 해결하기 위한 핵심은 두 가지에 있습니다.

 

1. fs모듈을 사용합니다.

const fs = require("fs");

const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
const [count, ...arr] = input;

 

const readline = require('readline');
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

백준 사이트에서 NodeJS를 사용하는 경우 'readline' 모듈 사용을 권장한다는 공지가 있긴 합니다. 하지만 현재 (2023.2.24 기준) fs 모듈이 정상적으로 잘 작동합니다. readline 모듈은 fs 모듈에 비해 소요시간이 더 많이 걸리기에, fs 모듈을 사용합니다.

 

+ 팁)  첫째 줄이 '테스트 케이스의 개수'이고 그 다음 줄부터 '테스트 케이스'인 경우, input 값을 배열 비구조화해서 풀이하면 간단하고 좋습니다.

 

 

 

2. 결과값을 하나로 뭉쳐서 출력합니다.

let result = "";

for (let i = 0; i < count; i++) {
  const item = arr[i].split(" ").map((e) => parseInt(e));
  result += `${item[0] + item[1]}\n`;
}

console.log(result);

 

for (let i = 0; i < count; i++) {
    const item = input[i].split(' ').map(e => parseInt(e));
    console.log(item[0] + item[1]);
}

첫 번째 코드와 두 번째 코드의 차이에서 소요 시간의 차이가 발생합니다.

첫 번째 코드는 result라는 변수를 두고, 그 안에 결과값을 붙인 다음, 한 번에 출력합니다.

두 번째 코드는 결과값이 나올 때마다 console.log()를 불러와서 출력합니다.

 

console.log()를 부르는 횟수가 많아지면, 그만큼 실행 소요 시간 또한 길어집니다. 그래서 첫 번째 코드처럼 한 변수에 결과값을 싹 저장한 후, 한 번에 출력해주는 방식을 사용하면 좋습니다.

 

 

 

반응형