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 |
Tags
- 그리디
- 부트캠프항해
- 탐욕알고리즘
- 카테고리필터
- 항해99후기
- react
- 백준
- 알고리즘
- 클라이언트 컴포넌트
- 숫자를 별점으로
- 배열 메소드
- JavaScript
- 배열 중복 제거
- jQuery
- 항해99
- 서버 컴포넌트
- db수정
- 항해99추천
- 자바스크립트
- NextJS v13
- 프로그래머스
- 날씨 api
- 실전프로젝트
- 중복카테고리
- 동전 0
- 중복선택
- 로딩 후 실행
- server component
- 항해99솔직후기
- greedy
Archives
- Today
- Total
공부 및 일상기록
[알고리즘] 백준 11047 동전 0 본문
문제설명
준규가 가지고 있는 동전은 총 N종류이고, 각각의 동전을 매우 많이 가지고 있다.
동전을 적절히 사용해서 그 가치의 합을 K로 만들려고 한다. 이때 필요한 동전 개수의 최솟값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000)
둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)
출력
첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다.
예제입력 1
10 4200
1
5
10
50
100
500
1000
5000
10000
50000
예제출력 1
6
나의 첫 풀이
let fs = require('fs')
let input = fs.readFileSync('/dev/stdin').toString().trim().split('\n')
let [N, goal] = input[0].split(' ').map(Number);
const array = input.slice(1).map(Number);
let count = 0;
for(let i = N-1; i>=0; i--){
while(array[i]<=goal){
goal -= array[i];
count++;
}
if (goal === 0) {
break;
}
}
console.log(count)
나는 너무 단순하게 생각했다.
일단 동전은 오름차순으로 주어진다고 했으니, 큰 동전을 먼저 사용해야 사용하는 동전 수가 적을테니 배열의 뒤에서 부터 반복문을 시작했다.
그리고 목표 금액보다 작은 금액이 나왔을 때, 목표금액 - 현재동전 을 가능할때까지 또한번 반복문을 사용했다.
그리고 혹시 목표금액이 음수가 될 수 있으니 goal이 0이 되면 바로 break했다.
하지만 이 문제는 이중for문을 사용할 만큼의 문제가 아니였다.
다시 푼 코드를 확인해보자.
다른사람 코드 참고해서 푼 코드
let fs = require('fs')
let input = fs.readFileSync('/dev/stdin').toString().trim().split('\n')
let [N, goal] = input[0].split(' ').map(Number);
const array = input.slice(1).map(Number);
const sortedArray = array.sort((a,b)=> b - a)
let count = 0;
sortedArray.forEach((currentCoin)=>{
if(currentCoin<=goal){
count = count + Math.floor(goal/currentCoin)
goal = goal%currentCoin
}
})
console.log(count)
이번에는 한 번씩 제외하지 않고, 한번에 나누기로 동전 개수를 구한다음, 나눠지지 않는 몫을 goal에 할당하는 방식을 택했다.
내 첫 풀이는 반복문 안에 반복문이 있어서 시간복잡도 면에서도 굉장히 좋지 않았는데 이 코드는 매우 빠르게 동작하였다.
'개발 > 알고리즘, 자료구조' 카테고리의 다른 글
[알고리즘] 백준 1541 잃어버린 번호 (javascript) (0) | 2024.08.21 |
---|---|
[알고리즘] 백준 11399 ATM (0) | 2024.08.20 |
[알고리즘] 모의고사 (1) | 2023.04.20 |
[알고리즘] 신고 결과 받기 (1) | 2023.04.20 |
[알고리즘] 1차 비밀지도 (0) | 2023.04.20 |