ssaid
시작, 행동
ssaid
  • 분류 전체보기 (5)
    • IT (4)
      • 컴퓨터구조 (0)
      • 운영체제 (0)
      • 자료구조 (0)
      • 알고리즘 (4)
      • 프로그래밍언어 (0)
      • 데이터베이스 (0)
    • One small step (1)
      • Just in mind (0)
      • 시작, 행동 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

전체 방문자
오늘
어제
hELLO · Designed By 정상우.
ssaid

시작, 행동

[node.js] 백준 15552번 빠른 A+B
IT/알고리즘

[node.js] 백준 15552번 빠른 A+B

2022. 8. 8. 15:30

백준 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
    'IT/알고리즘' 카테고리의 다른 글
    • [node.js] 백준 14681번 사분면 고르기
    • [node.js] 백준 9498번 시험 성적
    • [node.js] 백준 25083번 새싹
    ssaid
    ssaid

    티스토리툴바