다이나믹 프로그래밍 (Dynamic Programming) (5) - 실전문제 8.5) 효율적인 화폐 구성

2023. 8. 22. 14:39· Algorithm

문제)

N가지 화폐 종류가 주어진다. 이 화폐들을 사용해서 M원을 만들어야 한다. 이 때 최소한의 화폐 개수를 사용해서 M원을 만들어야 하며 화폐 구성은 같지만 순서가 다른 경우에는 같은 경우로 구분한다.

입력조건)

  • 첫째 줄에 N, M이 주어진다. (1 <= N <= 100, 1 <= M <= 10,000)
  • 이후 N개의 줄에는 각 화폐의 가치가 주어진다. 화폐 가치는 10,000보다 작거나 같은 자연수이다.

출력조건)

  • 첫째 줄에 M원을 만들기 위한 최소한의 화폐 개수를 출력한다.
  • 불가능할 때는 -1을 출력한다.
입력예시1)
2 15
2
3

출력예시1)
5
입력예시2)
3 4
3
5
7
출력예시2)
-1

풀이)

이 문제는 바텀업 방식을 통해서 반복문을 M 까지 돌면서 결과 리스트에 화폐 개수를 저장하는 방식으로 해결할 수 있다. 먼저 결과 리스트를 생성하고 무한대로 초기화 한다. 그리고 반복문을 1부터 M까지 돌면서 입력받은 화폐 종류에 대해서도 다시 반복문을 돌린다. 바깥쪽 반복문에 해당하는 인덱스를 i라고 하면 i원을 만들기 위해 결과 리스트의 [i - 화폐 종류]를 비교하여 최솟값을 산출하고 최솟값 + 1 을 인덱스 i에 저장하면 된다. 이 때 1을 더하는 이유는 해당 화폐 1개만 추가하면 i원을 만들 수 있기 때문이다.

i에서 입력 받은 화폐 종류를 뺄 때 0이 되는 경우에는 해당 화폐 1개만 사용하면 i원을 만들 수 있기 때문에 1이 저장되어야 한다. 따라서 결과 리스트의 0번째 인덱스에는 0을 저장하는 방식으로 조건문 없이 위의 최솟값 산출 과정에서 모두 해결 가능하다.

 

저작자표시 변경금지 (새창열림)

'Algorithm' 카테고리의 다른 글

다이나믹 프로그래밍 (Dynamic Programming) (4) - 실전문제 8.4) 바닥 공사  (0) 2023.08.22
다이나믹 프로그래밍 (Dynamic Programming) (3) - 실전문제 8.3) 개미 전사  (0) 2023.08.22
다이나믹 프로그래밍 (Dynamic Programming) (2) - 실전문제 8.2) 1로 만들기  (0) 2023.08.22
다이나믹 프로그래밍 (Dynamic Programming) (1) - 다이나믹 프로그래밍이란?  (0) 2023.08.21
이진 탐색 (Binary Search) (3) - 실전문제 7.3) 떡볶이 떡 만들기  (2) 2023.08.05
'Algorithm' 카테고리의 다른 글
  • 다이나믹 프로그래밍 (Dynamic Programming) (4) - 실전문제 8.4) 바닥 공사
  • 다이나믹 프로그래밍 (Dynamic Programming) (3) - 실전문제 8.3) 개미 전사
  • 다이나믹 프로그래밍 (Dynamic Programming) (2) - 실전문제 8.2) 1로 만들기
  • 다이나믹 프로그래밍 (Dynamic Programming) (1) - 다이나믹 프로그래밍이란?
공대생안씨
공대생안씨
전자공학과 학부생의 코딩 일기
공대생의 코딩 일기전자공학과 학부생의 코딩 일기
티스토리
|
로그인
공대생안씨
공대생의 코딩 일기
공대생안씨
글쓰기
|
관리
전체
오늘
어제
  • All Categories (153)
    • Spring Boot (46)
      • JPA (7)
      • Lombok (2)
    • Java (21)
    • DevOps (3)
      • CI,CD (8)
      • Monitoring (2)
    • Database (7)
      • MySQL (5)
      • MongoDB (1)
      • H2 (1)
    • Trouble Shooting (5)
    • FE (4)
    • IntelliJ (3)
    • Git (3)
    • Algorithm (41)

블로그 메뉴

  • 홈
  • 태그
  • Github

공지사항

인기 글

hELLO · Designed By 정상우.v4.2.2
공대생안씨
다이나믹 프로그래밍 (Dynamic Programming) (5) - 실전문제 8.5) 효율적인 화폐 구성
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.