백준 17212번 달나라 토끼를 위한 구매대금 지불 도우미
이 문제는 동적계획법 거스름돈 문제처럼 생각해서 풀면 된다.
다만 주의할 점이 2가지 있는데 첫 번째는 n이 1, 2, 5, 7일 경우 동전의 개수는 1개란 점이며,
두 번째로 주의해야 할 점은 n이 17일 경우 7 7 2 1이 아니라 7 5 5로 동전의 개수는 3개란 점이다.
아래 코드는 동전의 값만큼 빼준 뒤 1개를 더함으로써 dp[n-coin] + 1을 이용해 dp[n]을 구하는 방식이다.
메모리 : 34712 KB
시간 : 244 ms
n = int (input ())
dp = [float ("inf" ) for i in range (n + 1 )]
dp [0 ] = 0
coin = [7 ,5 ,2 ,1 ]
for i in range (1 , n + 1 ):
for j in range (len (coin )):
if coin [j ] <= i and dp [i - coin [j ]] + 1 < dp [i ]:
dp [i ] = dp [i - coin [j ]] + 1
print (dp [n ])
첫 번째로는 주의해야 할 점중 두 번째를 주의하지 않아 틀렸다. -> 큰 수인 7부터 빼고 봄.
(n이 17일 경우 3이 나와야 하는데 7부터 빼고 봐서 7 7 2 1 이렇게 4가 나옴)
두 번째로는 그냥 문제를 잘못 봤다. 동전의 종류는 1 2 5 7 인데 1 3 5 7 로 봐 문제를 틀렸다..
n = int (input ())
dp = [float ("inf" ) for i in range (n + 1 )]
dp [0 ] = 0
coin = [7 ,5 ,3 ,1 ]
for i in range (1 , n + 1 ):
for j in range (len (coin )):
if coin [j ] <= i and dp [i - coin [j ]] + 1 < dp [i ]:
dp [i ] = dp [i - coin [j ]] + 1
print (dp [n ])
n = int (input ())
coin = [] # 7,5,2,1
coin .append (n // 7 )
n %= 7
coin .append (n // 5 )
n %= 5
coin .append (n // 2 )
n %= 2
coin .append (n )
print (sum (coin ))