728x90
반응형
그리디 알고리즘(Greedy Algorithm)
- "매 선택에서 지금 이 순간 당장 최적인 답을 선택하여 적합한 결과를 도출하자"라는 모토를 가지는 알고리즘 설계 기법
- 최적해를 구하는 데에 사용되는 근사적인 방법
◾ 그리디 알고리즘 문제를 해결하는 방법
- 선택 절차(Selection Procedure): 현재 상태에서의 최적의 해답을 선택한다.
- 적절성 검사(Feasibility Check): 선택된 해가 문제의 조건을 만족하는지 검사한다.
- 해답 검사(Solution Check): 원래의 문제가 해결되었는지 검사하고, 해결되지 않았다면 선택 절차로 돌아가 위의 과정을 반복한다.
◾ 예시
그리디 알고리즘의 예로 거스름돈 계산 문제가 있다.
거스름 돈 n이 있고, 500원, 100원, 50원, 10원으로만 거슬러 주어야 할 때, 최소 개수의 동전으로 거슬러 주고, 동전의 개수를 구하는 문제이다.
만약, 주어진 n이 1380이라면 다음과 같은 순서로 문제를 풀 수 있다.
- 최소 개수의 동전을 거슬러 받기 위해 가장 큰 화폐 단위부터 돈을 거슬러 준다.
- 500원으로 거슬러 줄 수 있는 돈은 1,000원으로 2개이고 남은 돈은 380원이다.
- 남은 돈에서 100원으로 거슬러 줄 수 있는 돈은 300원으로 3개이고 남은 돈은 80원이다.
- 남은 돈에서 50원으로 거슬러 줄 수 있는 돈은 50원으로 1개이고 남은 돈은 30원이다.
- 마지막으로 10원으로 거슬러 줄 수 있는 돈은 30원으로 3개이고 남은 돈은 0원이 된다.
- 따라서 동전의 최소 개수는 2 + 3 + 1 + 3인 9가 된다.
// 거슬러 주어야 할 돈
let n = 1380;
// 동전의 개수를 셀 count
let count = 0;
// 거스름 돈의 종류를 담은 배열
const type = [500, 100, 50, 10];
for (let i = 0; i < type.length; i++) {
// 500원부터 거슬러 줄 수 있는 동전의 개수 세기
count += Math.floor(n / type[i]);
n %= type[i];
}
console.log(count);
[출처] https://ittrue.tistory.com/196 [IT is True:티스토리]
728x90
반응형
'Coding With Jina > Coding Test' 카테고리의 다른 글
[코딩테스트] 백준 10951번 Node.js(자바스크립트) 풀이 (0) | 2024.05.23 |
---|---|
백준 10950번 Node.js(자바스크립트) 풀이 (0) | 2024.05.23 |
[코딩테스트] 백준 1935번 Node.js(자바스크립트) 풀이 (0) | 2024.05.01 |
[코딩테스트] 백준 9012번 Node.js(자바스크립트) 풀이 (0) | 2024.04.29 |
[코딩테스트] 백준 1373번 Node.js(자바스크립트) 풀이 (0) | 2024.04.27 |