문제 주소: https://www.acmicpc.net/problem/14916
난이도: silver 5
입력을 받고, 최소값으로 최적화 시킬 것이기 때문에 inf를 설정해준다
그다음 dp테이블을 만들어준다 0번인덱스는 0값이 사실 입력으로 들어오지 않지만
계산의 편의성을 위해 만들어주자.
n = int(input())
INF = float("inf")
dp = [INF] * (n + 1)
coins = [2, 5]
점화식은 다음과 같다.
반복문을 통해 코인에 대해서 다음과같은 식을 정하고 coin부터 n까지 점화한다.
dp[i] = min(dp[i - coin] + dp[coin], dp[i])
n = int(input())
INF = float("inf")
dp = [INF] * (n + 1)
coins = [2, 5]
def get_min_chagne(n):
if n == 1:# 1이면 종료
return -1
elif n <= 4: #4보다 작으면 2원짜리만을 이용해야한다.
for coin in [2]:
dp[coin] = 1
for coin in [2]:
for i in range(coin, n + 1):
dp[i] = min(dp[i - coin] + dp[coin], dp[i])
else:
for coin in coins: #5원부터는 2원 5원 모두 사용한다
dp[coin] = 1
for coin in coins:
for i in range(coin, n + 1):
dp[i] = min(dp[i - coin] + dp[coin], dp[i])
if dp[n] != INF:
return dp[n]
else:
return -1
print(get_min_chagne(n))
n = int(input())
ans = 0
num = n%5 #입력받은 수를 일단 5로 나눠서 나머지를 구한다
if n == 1 or n == 3: #나머지가 1이나 3이면 -1출력
print(-1)
exit(0)
elif num%2 == 0: #나머지가 2라면 n을 5로나눈 몫 + 그 나머지를 2로나눈 몫을 더해서 출력
print(n//5 + num//2)
else: #나머지가 2로 안나눠진다? -> 5의 몫을 1만큼 줄이고, 그 나머지를 2로 나눠서 출력
#이 부분이 나름 센스있는게 2로 안나눠진다? -> 이말은 즉 홀수라는 뜻
#여기에 5를 더해버리면 짝수가되고 2로 무조건 나눠짐
print((n//5)-1 + (num+5)//2)
exit(0)