[다이나믹 프로그래밍 + 그리디] 백준 실버5 14916번: 거스름돈(Swift)

2023. 5. 29. 22:47·코테

https://www.acmicpc.net/problem/14916

 

14916번: 거스름돈

첫째 줄에 거스름돈 액수 n(1 ≤ n ≤ 100,000)이 주어진다.

www.acmicpc.net

문제풀이

위 문제는 거스름돈 5원과 2원으로 주어진 돈을 거슬러 줘야 하는데 이때 동전을 최소한으로 사용하여 거슬러 줘야 한다.

먼저, 15원까지 동전의 수를 나열해 보았다.

나열해 본 결과 반복되는 패턴이 있음을 알 수 있다.

주어진 돈이 5의 배수가 아니면 주어진 돈 n 원에 대한 동전의 개수는 n - 2원에 대한 동전의 개수 + 1인 것을 알 수 있었다.

때문에 위 문제는 다이내믹 프로그래밍을 활용하여 문제를 해결할 수 있다.

var n = Int(readLine()!)!
var result = 0

var dp = Array(repeating: 0, count: n + 1)

if n == 1 {
  print(-1)
} else if n == 2 {
  print(1)
} else if n == 3 {
  print(-1)
} else {
  dp[1] = -1
  dp[2] = 1
  dp[3] = -1
  
  for i in 4...n {
    if i % 5 == 0 {
      dp[i] = i / 5
      continue
    }
    dp[i] = dp[i-2] + 1
  }
  print(dp[n])
}

위 코드와 같이 n이 1 또는 3이 아닌 경우 돈을 거슬러 줄 수 있고,
n이 4 이상부터는 패턴이 적용되기 때문에 반복문을 통해 계산할 수 있다.

저작자표시 (새창열림)

'코테' 카테고리의 다른 글

[백트래킹 + 구현] 백준 실버1 14888번: 연산자 끼워넣기(Swift)  (0) 2023.06.09
[백트래킹 + 구현] 백준 실버2 14889번 스타트와 링크(Swift)  (0) 2023.06.09
[해시] 백준 실버4 10816번: 숫자 카드2(Swift)  (0) 2023.05.29
[완전 탐색] 백준 실버2 3085번: 사탕 게임(Swift)  (0) 2023.05.26
[다이나믹 프로그래밍 + 구현] 백준 실버3 14501번: 퇴사(Swift)  (0) 2023.05.24
'코테' 카테고리의 다른 글
  • [백트래킹 + 구현] 백준 실버1 14888번: 연산자 끼워넣기(Swift)
  • [백트래킹 + 구현] 백준 실버2 14889번 스타트와 링크(Swift)
  • [해시] 백준 실버4 10816번: 숫자 카드2(Swift)
  • [완전 탐색] 백준 실버2 3085번: 사탕 게임(Swift)
Esiwon
Esiwon
iOS 개발 블로그
  • Esiwon
    시원한 코드 기록
    Esiwon
  • 전체
    오늘
    어제
    • 분류 전체보기 (70)
      • iOS&Swift (24)
      • git & github (1)
      • 코테 (41)
      • 네부캠 회고 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    Race Condition
    Swift
    회고
    그리디
    photoUI
    GCD
    이분탐색
    다이나믹 프로그래밍
    BFS
    구현
    dfs
    챌린지
    ios
    PhotoKit
    코딩테스트
    실버
    Property wrapper
    재귀
    완전탐색
    네부캠
    탐색
    백준
    코테
    photos
    브루트포스 알고리즘
    노드
    비동기
    동시성
    Combine
    알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Esiwon
[다이나믹 프로그래밍 + 그리디] 백준 실버5 14916번: 거스름돈(Swift)
상단으로

티스토리툴바