
동전이 오름차순으로 주어지기 때문에 따로 재배열할 필요가 없다.
문제 해결의 단계는 아래와 같다.
N으로 입력받는다.K로 입력받는다.N만큼 반복하며 K를 각 금액으로 나눈 값을 합하고, K에 나머지를 저장하여 다시 반복한다.const input = require("fs")
.readFileSync(process.platform === "linux" ? "/dev/stdin" : "./input.txt")
.toString()
.trim()
.split("\n")
.map((el) => el.split(" ").map(Number));
const N = input[0][0];
let K = input[0][1];
let num = 0;
for(let i=N; i>0; i--){
if(K === 0)
break;
if(K >= input[i][0]){
num += Math.floor(K/input[i][0]);
K %= input[i][0];
}
}
console.log(num);
이전 문제 풀이에서 언급했듯이 Js로 백준을 푸는 것은 꽤나 까다롭다. 그래서 계속 피해왔지만 그래도 풀어야한다. 이 글을 참고해서 문제를 풀었다. 혹시 Js로 문제풀이를 할 경우 참고하시길 바란다.
간략하게 설명하자면
const input = require("fs")
.readFileSync(process.platform === "linux" ? "/dev/stdin" : "./input.txt")
.toString()
.trim()
.split("\n")
.map((el) => el.split(" ").map(Number));
백준은 리눅스 환경에서 실행된다. VSCode에서 실행을 위해 삼항연산자를 활용하여 input.txt 파일을 동일 디렉토리에 저장해 사용한다.
.toString()을 사용하여 입력값을 문자열로 받고, .trim()으로 공백을 제거한 후, .split("\n")으로 줄바꿈을 기준으로 문자열을 나눈다. .map()은 새로운 배열을 반환해주는 함수이다.
예를들어 해당 문제에서 입력이 아래와 같은 형식으로 들어온다.
10 4200
1
5
10
50
100
500
1000
5000
10000
50000
.toString()으로 해당 입력값들을 문자열로 변환한다..trim()으로 혹시 모를 공백을 제거한다..split("\n")으로 배열을 생성한다. [
"10 4200",
"1",
"5",
"10",
"50",
"100",
"500",
"1000",
"5000",
"10000",
"50000"
].map()으로 각 문자열을 공백을 기준으로 분리하고 숫자로 변환한다. [
[10, 4200],
[1],
[5],
[10],
[50],
[100],
[500],
[1000],
[5000],
[10000],
[50000]
]기본적인 틀은 위와 같고 입력받는 값에 따라 잘 변환해서 사용하면 된다.
💡한줄평
역시 백준을 Js로 풀 때는 입력받는 것에 신경을 잘 써야하는 것이 번거롭고 어렵다. 이 부분으로 인해 두 번이나 오답이 발생했다. 더 익숙해지도록 노력해야겠다.