728x90
문제 2720번
https://www.acmicpc.net/problem/2720
문제를 읽는데...
'어쩔수 없이 뛰어난 코딩 실력을 발휘해 리암을 도와주는 프로그램을 작성하려고 하지만, 디아블로를 하느라 코딩할 시간이 없어서 이 문제를 읽고 있는 여러분이 대신 해주어야 한다.' -> ???
...
일단 해보자...
보니까 그리디 알고리즘을 이용하는 것 같다.
어떤 식으로 할까 하다가 다른 분의 풀이를 보니까 이런 식으로 작성해야겠다는 생각이 들어서 해봤다.
const readFileSyncAdress = process.platform === 'linux' ? '/dev/stdin':'./input.txt'
const input = require("fs").readFileSync(readFileSyncAdress).toString().trim().split('\n').map(x=>Number(x));
const T = input.shift(); //해당 요소 삭제
const coins = [25,10,5,1]; //센트로 단위를 바꿈
input.forEach((change)=>{ //받은 테스트 케이스 개수만큼
let count = [0,0,0,0]; //거스름돈 개수
for(let i=0;i<coins.length;i++){
if(change>=coins[i]){
count[i] = Math.floor(change/coins[i]); //소수점 이하는 버림
change = change%coins[i];
}
}
console.log(count.join(' '));
});
돈을 센트로 계산했기 때문에 coins 배열에 센트로 변경한 동전들을 넣어준다.
forEach함수를 이용해 맨 앞의 테스트 케이스 개수를 뺀 input 배열을 순회해 주었다.
그리고 잔돈의 개수를 넣어줄 count 배열을 따로 만들어서, 입력받은 돈이 coins의 돈보다 크거나 같을 때 둘을 나눠서 개수를 count 배열에 저장해 준다. 그리고 나머지 돈을 %를 이용하여 change에 저장한다. 그렇게 동전을 다 거슬러줄 때까지 반복해 주면 된다.
입력받을 때 trim()을 안 써서 자꾸 틀렸다고 나왔다...
분명 잘 나오는데 이상하다 했는데 공백이 들어가거나 했나 보다.
[참고] https://s0ojin.tistory.com/18
728x90
'백준 > JavaScript' 카테고리의 다른 글
[JS] 백준 일반 수학 1 - 다섯 번째 이야기 (0) | 2024.02.03 |
---|---|
[JS] 백준 일반 수학 1 - 네 번째 이야기 (0) | 2024.02.02 |
[JS] 백준 일반 수학 1 - 두 번째 이야기 (0) | 2024.01.31 |
[JS] 백준 일반 수학 1 - 첫 번째 이야기 (0) | 2024.01.30 |
[JS] 백준 2차원 배열 - 마지막 이야기 (0) | 2024.01.30 |