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
- 제너릭메서드
- SQ3R
- 향상된for문
- 코딩테스트
- staging_area
- 4A피드백
- 스레드동기화
- 자바
- 프로그래머스
- ChatGPT
- 스프링
- 동전교환알고리즘
- 99클럽
- 재귀적사고
- API명세서
- 프로젝트
- 백준
- 날씨API
- openapi
- 파일사용권한
- Spring
- 성장형마인드셋
- 네이티브애플리케이션
- 루트사용자
- API
- 배열탐색
- 참조변수타입변환
- SQL
- string메서드
- Java
Archives
- Today
- Total
개발 공부용
그리디 | 백준 11047 동전 0 본문
문제
https://www.acmicpc.net/problem/11047
동전을 N종류 가지고 있고 각각의 동전의 개수는 무한할 때, K원을 만들기 위해 필요한 동전 개수의 최솟값을 구해라
입력
- 첫째 줄: N과 K
- 둘째 줄~ : N개의 줄에 동전의 가치가 오름차순으로 주어짐
출력
- K원을 만들기 위해 필요한 동전 개수의 최솟값
그리디
그리디는 현재의 순간의 최적의 선택을 하면 전체적으로 최선임을 가정하는 알고리즘.
예를 들어 거스름돈은 가장 큰 단위의 동전부터, 회의실 배정은 가장 빨리 끝나는 회의부터.
다만 이 가정이 늘 참이 되는 것이 아님에 주의.
아래와 같은 조건을 만족해야 한다.
1. 각 단계에서의 최적 선택이 전체 최적 선택의 일부여야 한다.
2. 문제를 부분 문제로 해결할 수 있으며, 부분 문제의 최적해들이 전체 최적해를 구성해야 한다.
e.g.) 최단 경로 문제에서 현재까지의 최단 경로가 전체 최단 경로의 일부인 경우
풀이
import sys
input = sys.stdin.readline
N, K = map(int, input().split())
coins = [int(input().strip()) for _ in range(N)]
result = 0
for i in range(N):
q = K//coins[N-i-1]
if q > 0:
result += q
K -= (q*coins[N-i-1])
if K == 0:
break
print(result)
1. 동전의 가치를 하나의 배열에 오름차순으로 넣고
2. 뒤에서부터 해당 값으로 K를 나눈다.
3. 몫이 발생하면 result에 더하고 몫*가치만큼을 K원에서 뺀다.
4. K == 0 or 동전 배열을 모두 돌면 끝남.
'코딩 테스트' 카테고리의 다른 글
| 완전탐색 | 1206. [S/W 문제해결 기본] 1일차 - View (0) | 2025.11.06 |
|---|---|
| 그리디 | 백준 11399 ATM (0) | 2025.10.30 |
| 누적합 | 백준 11660 구간 합 구하기 5 (0) | 2025.10.30 |
| 누적합 | 백준 16139 인간-컴퓨터 상호작용 (0) | 2025.10.27 |
| 누적합 | 백준 2559 수열 (0) | 2025.10.27 |