본문 바로가기

코딩/알고리즘

백준) 15552 - 빠른 A+B JS

📌 문제 링크

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


📌 문제 탐색하기

  • 각각 두 정수 A와 B가 주어지면 더하여 하나씩 순서대로 출력한다.

시간복잡도

  • O(n)

📌 코드 설계하기

  1. 문제의 input을 개행으로 분리합니다.
  2. 덧셈이 필요한 부분만 배열로 가져와 띄어쓰기로 분리한 후 숫자로 변환합니다.
  3. 모든 값을 더해줄 `sum`배열을 초기화합니다.
  4. 반복문을 돌면서 덧셈이 필요한 배열의 각 두 수의 합을 sum 배열에 추가해 줍니다.
  5. sum 배열로 모든 결과를 한번에 출력합니다.

📌 시도 회차 수정 사항 (Optional)

0회차

  • 처음에는 `reduce()`를 쓰면 될 것이라고 생각했다. 하지만 이 문제의 요구사항은 각 줄의 두 수를 각각 더해서 바로바로 출력하는 형태이며 `reduce()`는 배열 전체를 하나의 결과로 줄일 때 적합하다.
  • 그렇기 때문에 이 문제는 for문을 사용하는 것이 더 적합하다.

1회차

const fs = require("fs");
const filePath =
  process.platform === "linux" ? "/dev/stdin" : __dirname + "/input1.txt";
const [_, ...arr] = fs.readFileSync(filePath).toString().trim().split("\n");
const numberArr = arr.map((x) => x.split(" ").map(Number));
for (let i = 0; i < numberArr.length; i++) {
  let sum = 0;
  sum += numberArr[i][0] + numberArr[i][1];
  console.log(sum);
}
  • 처음에는 위와 같이 for문 안에서 값을 더해서 바로 출력하는 형태로 작성했었는데 시간초과가 발생했다.
  • `console.log`를 여러 번 호출하는 것보다 한 번에 호출하는 방식이 더 효율적이기에 `number`타입이였던 `sum`을 `number[]`로 바꾸어서 한번에 출력하는 형태로 수정하였다.

📌 정답 코드

//https://www.acmicpc.net/problem/15552
export {};

const fs = require("fs");
const filePath =
  process.platform === "linux" ? "/dev/stdin" : __dirname + "/input1.txt";
const [_, ...arr] = fs.readFileSync(filePath).toString().trim().split("\n");
const numberArr = arr.map((x: string) => x.split(" ").map(Number));
const sum: number[] = [];
for (let i = 0; i < numberArr.length; i++) {
  sum.push(numberArr[i][0] + numberArr[i][1]);
}
console.log(sum.join("\n"));

 

'코딩 > 알고리즘' 카테고리의 다른 글

백준) 8393 - 합 JS  (0) 2024.11.07
백준) 25304 - 영수증 JS  (1) 2024.11.06
백준) 11382 - 꼬마 정민 JS  (0) 2024.11.04
백준) 11866 - 요세푸스 문제 0 JS  (0) 2024.10.27
백준) 2193 - 이친수 JS  (1) 2024.10.26