일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- dfs
- ESlint
- 결정 알고리즘
- 이분 검색
- recoil
- 투포인터
- tailwind
- 리터럴 타입
- Jest
- map
- CORS
- app router
- TS
- SSR
- 인터섹션
- Cypress
- useAppDispatch
- 공변성
- webpack
- 무한 스크롤
- Promise
- 호이스팅
- 태그된 유니온
- 반공변성
- 타입 좁히기
- RTK Query
- CI/CD
- autosize
- React
- async/await
Archives
- Today
- Total
짧은코딩
효율적인 화폐 구성 본문
반응형
해결법
이 문제도 보텀업 방식으로 푸는 문제이다. 리스트 d에 작은 수부터 체크하면서 푼다.
이 문제의 핵심 풀이 방식은 지금의 숫자와 비교했을 때, 동전의 숫자만큼 뺀 숫자가 존재하면 당연히 동전 수만큼 더한 수도 존재한다는 것이다.
풀이
n, m = map(int, input().split())
ary = []
for i in range(n):
ary.append(int(input()))
d = [10001] * (m+1)
d[0] = 0
# 동전 수만큼 반복
for i in range(n):
# 가장 작은 동전 수부터 구하려는 목표 수까지 반복
for j in range(ary[i], m+1):
# (i-k)원을 만들 수 있으면
if d[j - ary[i]] != 10001:
d[j] = min(d[j], d[j-ary[i]]+1)
if d[m] == 10001:
print(-1)
else:
print(d[m])
반복문에서 동전 수만큼 반복하고 중첩문으로 가장 작은 동전 수부터 구하려는 목표 수까지 반복한다. 그리고 d[j - ary[i])가 만들 수 있는 숫자이면 비교해서 작은 수를 넣어준다.
반응형
'코딩 테스트(Python) > 이것이 취업을 위한 코딩 테스트다' 카테고리의 다른 글
플로이드 워셜 알고리즘 (0) | 2022.07.04 |
---|---|
최단 경로, 다익스트라 (0) | 2022.06.30 |
바닥 공사 (0) | 2022.06.23 |
개미 전사 (0) | 2022.06.21 |
1로 만들기 (0) | 2022.06.21 |
Comments