프로그래머스 - 거스름돈 [연습문제]

2026. 1. 26. 08:59·코테

문제 설명:

Finn은 편의점에서 야간 아르바이트를 하고 있습니다. 야간에 손님이 너무 없어 심심한 Finn은 손님들께 거스름돈을 n 원을 줄 때 방법의 경우의 수를 구하기로 하였습니다.

예를 들어서 손님께 5원을 거슬러 줘야 하고 1원, 2원, 5원이 있다면 다음과 같이 4가지 방법으로 5원을 거슬러 줄 수 있습니다.

1원을 5개 사용해서 거슬러 준다.
1원을 3개 사용하고, 2원을 1개 사용해서 거슬러 준다.
1원을 1개 사용하고, 2원을 2개 사용해서 거슬러 준다.
5원을 1개 사용해서 거슬러 준다.


거슬러 줘야 하는 금액 n과 Finn이 현재 보유하고 있는 돈의 종류 money가 매개변수로 주어질 때, Finn이 n 원을 거슬러 줄 방법의 수를 return 하도록 solution 함수를 완성해 주세요.


문제 예시:

n money result
5 [1,2,5] 4

문제 해설:

def solution(n, money):
    dp = [1] + [0] * n
    
    for i in money:
        for subN in range(i, n+1):
            if subN >= i:
                dp[subN] += dp[subN-i]
                
    return dp[n] % 1000000007

dp 문제였다...

DP는 처음이라 풀다가 해설을 봤다

결과적으로 dp의 핵심은 문제를 작은 단위로 쪼개서 이전 단계에서 값이 다음 단계에 미치는 영향을 분석하여 나눠서 푸는 문제이다

 

이 문제에서 핵심은 각 money 안에 있는 item들이 어떻게 다음 index에 영향을 주는지 그리고 money의 다음 index를 볼 때 어떻게 영향을 주는지에 따라서 달라지는 것이다.

 

예시로 설명하자

i = 1

dp = [1, 1, 1, 1, 1, 1]

이때, 0번째 인덱스는 0인 count이다

 

i = 2

dp = [1, 1, 2, 2, 3, 3, 3]

dp [subN] += dp [subN-i]인 이유가 여기서 나온다

 

subN = 2 / i = 2

dp[2] += dp [0]

왜냐하면 2를 만드는 경우의 수는 1+1, 2 이므로

 

dp [3] += dp [3-2]

1+1+1, 2+1

 

여기서 우리가 알 수 있는 것은

이전의 경우의 수에서 1씩 더한다는 것인데

 

dp [4] += dp [4-2]

이러면 4는 1+1+1+1, 1+1+2, 2+2로 이전의 2를 만드는 경우의 수에 2를 더하는 2가지 경우의 수를 더한 것이다.

 

즉, 이전의 경우의 수에 현재 가능한 경우의 수를 더하는 방법이다.

1일 때는 1개의 경우의 수만

하지만 2일 때는 2를 만드는 경우의 수가 2개 또한 2씩 늘어나니 4일 때는 2인 경우의 수를 활용하여 값을 늘릴 수 있다.

 

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

프로그래머스 - [1차] 셔틀버스 [2018 KAKAO BLIND RECRUITMENT]  (0) 2026.01.27
프로그래머스 - 리코쳇 로봇 [연습문제]  (0) 2026.01.26
프로그래머스 - 행렬의 곱셈 [연습문제]  (0) 2026.01.25
프로그래머스 - 의상 [해시]  (1) 2026.01.25
프로그래머스 - 튜플 [2019 카카오 개발자 겨울 인턴십]  (1) 2026.01.21
'코테' 카테고리의 다른 글
  • 프로그래머스 - [1차] 셔틀버스 [2018 KAKAO BLIND RECRUITMENT]
  • 프로그래머스 - 리코쳇 로봇 [연습문제]
  • 프로그래머스 - 행렬의 곱셈 [연습문제]
  • 프로그래머스 - 의상 [해시]
junsky00
junsky00
대기만성?
  • junsky00
    편안한 마음으로 꽃 구경하기
    junsky00
  • 전체
    오늘
    어제
    • 분류 전체보기 (26)
      • 코테 (21)
      • IT 뉴스 (4)
      • SKALA (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    파이썬
    동적 프로그래밍
    탐색
    카카오
    PAPER
    큐
    보고서 생성
    SK AX
    LLM 잘 쓰기
    스택
    코딩 테스트
    AI
    코테
    Python
    프로그래머스
    Google Paper
    구현
    DP
    BFS
    AI agent
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
junsky00
프로그래머스 - 거스름돈 [연습문제]
상단으로

티스토리툴바