Contents
- 문제 설명
[제한사항]
[입출력 예] - 알고리즘 분석
[나의 풀이]
[Most 1 의 풀이]
문제 설명
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은 100,000 이하의 자연수입니다.
- 화폐 단위는 100종류 이하입니다.
- 모든 화폐는 무한하게 있다고 가정합니다.
- 정답이 커질 수 있으니, 1,000,000,007로 나눈 나머지를 return 해주세요.
입출력 예
n | money | result |
5 | [1,2,5] | 4 |
알고리즘 분석
- 다른 사람의 풀이
def solution(n, money):
table = [[0 for _ in range(n+1)] for _ in range(len(money))]
table[0][0] = 1
# table의 첫줄은 모두 1을 값으로 지니게됨
for i in range(money[0], n+1, money[0]):
table[0][i] = 1
for y in range(1, len(money)):
for x in range(n+1):
if x >= money[y]:
table[y][x] = (table[y-1][x] + table[y][x-money[y]])
else:
table[y][x] = table[y-1][x]
print(table)
return table[-1][-1] % 1000000007
- Most1의 풀이
def solution(total, coin):
arr = [1] + [0]*total
for c in coin:
for i in range(c, total+1):
arr[i] += arr[i-c]
return arr.pop()
코딩테스트 연습 - 거스름돈
Finn은 편의점에서 야간 아르바이트를 하고 있습니다. 야간에 손님이 너무 없어 심심한 Finn은 손님들께 거스름돈을 n 원을 줄 때 방법의 경우의 수를 구하기로 하였습니다. 예를 들어서 손님께 5
programmers.co.kr
'프로그래머스(Python) > Level3' 카테고리의 다른 글
[카카오 기출문제] '블록 이동하기' 문제 풀이 - Python (0) | 2020.11.06 |
---|---|
[카카오 기출문제] '외벽 점검' 문제 풀이 - Python (0) | 2020.11.05 |
[프로그래머스] '멀리뛰기' 알고리즘 풀이 - Python (0) | 2020.11.04 |
[카카오 기출문제] '기둥과 보 설치' 문제 풀이 - Python (0) | 2020.11.04 |
[프로그래머스] '가장 긴 팰린드롬' 알고리즘 풀이 - Python (0) | 2020.11.03 |