[백준 알고리즘] Node.js 11047. 동전 0
2023. 6. 5. 11:16ㆍ코딩연습
1. 문제
https://www.acmicpc.net/problem/11047
11047번: 동전 0
첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)
www.acmicpc.net
2. 풀이
- 주어진 동전의 가치에 대한 내용을 내림차순으로 정렬한다.
- k 값 보다 큰 동전이라면 넘어가고, k 값보다 작은 동전이라면 반복하여 sum 변수에 더한다
sum이 k보다 커진다면 다음 동전으로 넘어가는 과정을 반복하여 해당 k 값과 같아질 때까지 반복한다.
const inputs = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const [n,k] = inputs.shift().split(' ').map(Number);
const coins = inputs.map(Number).sort((a,b) => b-a);
let sum = 0;
let count = 0;
for(let i = 0; i < coins.length; i++){
sum += coins[i];
if(sum > k) sum -= coins[i];
else if(sum < k) {
i--;
count++;
}
if(sum === k) break;
}
console.log(count + 1)
- 마지막에 count + 1 을 한 이유는 sum 과 k 값이 같아졌을 때, 동전을 추가하지 않는 코드를 작성했기 때문이다.
3. 정리
- 처음엔 else if 가 아닌 if 문으로 작성하여 무한 루프에 빠졌었다.
- 다른 분의 풀이를 보니 나누기와 나머지를 이용하여 푸신 분도 있었다.
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
let [N, K]= input.shift().split(' ').map(n => parseInt(n))
let cnt = 0
let q
for(let i = N - 1; i >= 0; i--) {
let value = parseInt(input[i])
q = Math.floor(K/value)
if(q === 0) continue
cnt += q
K %= value
if(K === 0) break
}
console.log(cnt)
- k / value : k 보다 큰 가치의 동전인지 확인하는 코드,
- 가치가 작은 동전이라면 cnt를 증가시키고, k 를 동전의 가치로 나누고 난 나머지의 값으로 변경.
- 이후 k 가 0이 되면 종료.
'코딩연습' 카테고리의 다른 글
[백준 알고리즘] Node.js 2805. 나무 자르기 (0) | 2023.06.09 |
---|---|
[백준 알고리즘] Node.js 2740. 행렬 곱셈 (0) | 2023.06.07 |
[백준 알고리즘] Node.js 11399. ATM (0) | 2023.06.05 |
[백준 알고리즘] Node.js 11659. 구간 합 구하기 4 (0) | 2023.06.03 |
[백준 알고리즘] Node.js 9461. 파도반 수열 (0) | 2023.06.01 |