Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 배열같은배열아닌너
- 호이스팅
- 1668
- 비동기처리
- 함수 parmater
- 백준
- 탐욕 알고리즘
- setTiemOut
- 11047
- javascript
- 함수 이놈
- 함수 선언문
- html5
- 11399
- 1302
- 동적계획법
- 자류구조
- 1568
- baekjoon
- 1931
- 1236
- 2667
- event loop
- 함수 arguments
- 9461
- 1904
- 렉시컬 스코프
- 유사배열
- Async/Await
- 1543
Archives
- Today
- Total
두치의 개발공부
BaekJoon_11047(동전) 본문
문제풀이
매 순간 최적의 방법을 찾아내는 탐욕 알고리즘의 문제이다.
최소의 동전으로 가치의 값을 충족시켜야 하기 때문에 가치를 가장 큰 동전으로 많이 채워야 동전을 적게 쓸 수 있다.
오름차순으로 입력받는 동전을 내림차순으로 정렬하여 앞에서 부터 가치가 동전으로 나누어지는 값이면 몫은 사용된 동전 갯수로,
나머지값은 앞으로 채워야 하는 가치에 재할당 한다.
동전을 나눴으면 더 할 필요가 없기 때문에 for문에서 break문을 선언하여 성능을 향상 시킨다.
처음에는 if문 조건을 if(K > data)로 하여 가치가 동전보다 크면 나누는 조건을 적용하였는데 백준에 나와있는 예제는 통과하지만 제출은 오답이었다. 반례를 찾아보니 다음과 같은 경우가 있을 수 있어, 몫을 나눌 수 있을 때 조건문을 타도록 if(parseInt(K/data)) 로 변경하였다.
반례
3 9 1 3 5 |
2 4 2 3 |
코드
const answer = ([n,...arr]) => {
let K = n.split(' ').map(Number)[1];
// 내림차순 정렬
const coins = arr.filter(data => data.trim()).map(Number).sort((a,b) => b-a);
let result = 0;
while(K > 0){
for(data of coins){
if(parseInt(K / data)){
result += parseInt(K / data);
K = K % data;
break;
}
}
}
console.log(result);
}
const input = [];
require("readline")
.createInterface(process.stdin, process.stdout)
.on("line", (line) => {
input.push(line);
})
.on("close", () => {
answer(input);
process.exit();
});
소스코드는 깃헙에서도 확인 가능합니다. 🤗
https://github.com/duduchi/Algorithm/tree/main/Greedy
GitHub - duduchi/Algorithm: 알고리즘 이론 및 구현 소스 정리 프로젝트 입니다.
알고리즘 이론 및 구현 소스 정리 프로젝트 입니다. Contribute to duduchi/Algorithm development by creating an account on GitHub.
github.com
'알고리즘' 카테고리의 다른 글
BaekJoon_1541(잃어버린 괄호) (0) | 2022.05.11 |
---|---|
BaekJoon_1931(회의실 배정) (0) | 2022.05.10 |
BaekJoon_11399(ATM) (0) | 2022.05.06 |
BaekJoon_1932(정수 삼각형) (0) | 2022.05.03 |
BaekJoon_1149(RGB 거리) (0) | 2022.05.03 |