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 |
Tags
- 프로그래머스
- 코딩테스트
- pandas
- 노마드코딩
- python
- 알고리즘 스터디
- Join
- String Method
- javascript
- 알고리즘
- 선그래프
- NumPy
- aws jupyter notebook
- 가상환경
- 파이썬
- Matplotlib
- dataframe
- type hint
- 정보처리기사 c언어
- 백준
- Stack
- queue
- openCV
- 자료구조
- 알고리즘스터디
- MySQL
- Selenium
- Algorithm
- programmers
- 데이터시각화
Archives
- Today
- Total
조금씩 꾸준히 완성을 향해
[Algorithm] 백준 11047 동전 0 with Python 본문
문제
준규가 가지고 있는 동전은 총 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
내가 짠 코드
num, price = map(int, input().split())
coins = [int(input()) for _ in range(num)] #동전들을 리스트로 저장
coins.reverse() #내림차순으로 변환(가장 먼저 검사해야 할 값을 앞으로 보내기)
cnt= 0 #사용되는 동전의 개수
for coin in coins:
if price / coin < 1: #동전이 목표 금액보다 클 때는 스킵
continue
if price / coin == 1: #동전이 목표 금액과 같다면 카운트 후 break
cnt += 1
break
else: #동전이 목표 금액보다 작다면
cnt += price // coin #금액에서 동전을 나눈 몫을 카운트에 더하기
price = price % coin #금액에서 동전을 나눈 나머지를 다시 금액으로 업데이트
print(cnt)
차근차근 경우의 수들을 생각을 하며 동전이 목표 금액보다 클 때, 같을 때, 적을 때를 각각 나눠서 코드를 짜보았다.
정답은 맞았으나 다른 코드들을 살펴보니 훨씬 짧고 효율적인 방법이 존재했다.
N, K = map(int, input().split()) # 정수 데이터 타입으로 변환하여 숫자를 N,K에 각각 저장
coins = [int(input()) for _ in range(N)] # 동전의 종류를 coins에 저장
coins.reverse() #내림차순으로 변환(가장 먼저 검사해야 할 값을 앞으로 보내기)
ans = 0
for coin in coins:
ans += K // coin # K를 내림차순으로 정렬된 coin으로 나누어주면 몫을 ans에 저장
K %= coin # coin으로 나눈 나머지를 K에 저장
print(ans)
돟전이 금액보다 크거나 같거나 작거나 상관없이 그냥 몫과 나머지만 생각하면 되는 것이었다.
동전이 금액보다 크다면 어짜피 나눈 몫은 0이고 나머지는 금액 그대로가 되기 된다.
동전과 금액이 같을 때도 마찬가지로 몫은 1이고 나머지는 0이니 굳이 케이스를 나눌 필요가 없었다.
조금더 깊게, 꼼꼼하게 생각하는 습관을 길러야 겠다.
https://www.acmicpc.net/problem/11047
'DataStructure & Algorithm > 문제풀이' 카테고리의 다른 글
[Algorithm] 백준 10989 수 정렬하기3 with Python (0) | 2023.06.29 |
---|---|
[Algorithm] 백준 2805 나무자르기 with Python (0) | 2023.06.29 |
[Programmers] 프로그래머스 완주하지 못한 선수 with Python (0) | 2022.10.25 |
[Programmers] 프로그래머스 괄호 변환 with Python (0) | 2022.10.14 |
[Algorithm] 백준 10829 이진수 변환 with Python (0) | 2022.10.13 |