본문 바로가기
JS/백준

[백준JS] 10810. 골 넣기

by 박기린 2023. 3. 11.

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

백준 10810 - 골 넣기 문제를 풀어봅시다.

 

 

문제 링크

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

 

 

 

 

 


문제 해석

N개의 바구니가 있습니다. 원활한 설명을 위해, N이 6이라고 가정을 합니다.

각 바구니에는 0이 담겨 있습니다.

 

 

 

입력으로는 [i, j, k]가 들어옵니다.

i부터 j까지의 바구니에, k 숫자를 담습니다.

 

 

 

 

[ i = 1, j = 3, k = 3 ] 이라고 가정을 합니다.

첫 번째부터 세 번째까지의 바구니 안에 [k = 3]을 담아줍니다.

 

[i, j, k]가 총 M번이 주어지는데, 모두 실행을 한 뒤에 결과값을 출력하는 게 10810 - 공 넣기 문제 입니다.

 

 

 

 

 

 


정답 코드

const fs = require("fs");
const [NnM, ...exes] = fs
  .readFileSync("/dev/stdin")
  .toString()
  .trim()
  .split("\n");
const [n, m] = NnM.split(" ").map((e) => +e);
const baskets = new Array(n).fill(0);
let result = "";

const execute = (str) => {
  const [i, j, ball] = str.split(" ").map((e) => +e);

  for (let x = i; x <= j; x++) {
    baskets[x - 1] = ball;
  }
};

exes.forEach(execute);
baskets.forEach((e) => (result += `${e} `));
console.log(result);

 

 

 

 

 

 


정답 코드 풀이

const fs = require("fs");
const [NnM, ...exes] = fs
  .readFileSync("/dev/stdin")
  .toString()
  .trim()
  .split("\n");
const [n, m] = NnM.split(" ").map((e) => +e);
1. fs 모듈을 이용해서 입력을 받아옵니다.
2. 받은 입력을 split('\n')을 이용해서, 줄 간격을 기준으로 Array로 변환합니다.
3. Array 비구조화를 이용해서, 첫 번째 줄만 NnM이라는 상수에 저장하고, 나머지는 rest 매개변수(...)를 이용해서 exes라는 상수에 저장해줍니다.
4. NnM은 split(' ')을 이용해서, 띄어쓰기 간격을 기준으로 Array로 변환합니다. 그리고 Array 비구조화를 이용해서, n과 m으로 분리합니다.

 

 

 

 

const baskets = new Array(n).fill(0);

new 연산자와 Array 생성자 함수, fill(0) 내장함수를 이용해서 n개의 element가 존재하는 Array를 만들고, 각 element는 0이 담겨 있도록 합니다. 그리고 baskets라는 상수에 Array를 저장합니다.

 

 

 

 

 

const execute = (str) => {
  const [i, j, ball] = str.split(" ").map((e) => +e);

  for (let x = i; x <= j; x++) {
    baskets[x - 1] = ball;
  }
};

execute라는 함수를 만듭니다. 

이 함수는 [i, j, k]가 담긴 String을 인수로 받을 함수입니다.

 

1. [i, j, k]가 담긴 String을 split(' ')을 이용해서 Array로 변환하고, Array 비구조화로 i, j, ball(k)라는 각각의 상수로 분해합니다.
2. x는 i부터 j까지 반복하는 for 반복문을 만들고, Array는 zero-based라서 0부터 시작하기 때문에, baskets Array의 x-1 번째 element에 ball(k)가 담기도록 합니다.

 

 

 

 

exes.forEach(execute);

[i, j, k] String들이 담긴 Array인 exes에 forEach() 내장함수를 사용합니다. 그리고 forEach()의 인수로 execute 함수의 포인터를 연결합니다.

그러면 baskets Array에는 원하는 결과값이 담깁니다. 입맛대로 baskets Array의 elments를 출력해주면 됩니다.

 

 

 

반응형