안녕하세요. 박기린 입니다.
백준 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를 출력해주면 됩니다.
반응형
'JS > 백준' 카테고리의 다른 글
[백준JS] 10809. 알파벳 찾기 (0) | 2023.03.17 |
---|---|
[백준JS] 1152. 단어의 개수 (반례 설명 포함) (0) | 2023.03.15 |
[백준JS] 11654. 자바스크립트 아스키 코드 출력하기 (ASCII) (0) | 2023.03.14 |
[백준JS] 10811. 바구니 뒤집기 (0) | 2023.03.12 |
[백준JS] 15552. 빠른 A+B (0) | 2023.02.24 |