https://www.acmicpc.net/problem/2294
N,K=map(int,input().split())
coin=[0] #0은 더미
for _ in range(N):
coin.append(int(input()))
dp=[[100001]*(K+1) for _ in range(N+1)]
for n in range(1,N+1):
for k in range(0,K+1):
if k==0:
dp[n][k]=0
continue
case1=100001
if k>=coin[n]:
#첫 시작일 때
if n==1:
if k%coin[n]==0:
dp[n][k]=k//coin[n]
continue
else: #그 이후부터
case1=dp[n][k-coin[n]]+1 #사용하는 경우
case2=dp[n-1][k] #사용하지 않는 경우
dp[n][k]=min(case1,case2)
ans=dp[N][K]
if ans==100001:
print(-1)
else:
print(ans)

맞았다!!!! 원트에 도움 없이 맞았다ㅜㅜㅜㅜ

DP 문제를 맞추다니ㅜㅜ 심지어 골드 문제야! 지금 내 코드는 뭐 쓰레기일지도 모르겠지만 일단 맞았고 앞으로 더 깔끔하고 직관적인 코드를 짜도록 노력하면 되니까!
'coding test > Baekjoon' 카테고리의 다른 글
| [Python] 1106번 호텔 (1) | 2025.05.19 |
|---|---|
| [Python] 2293번 동전 1 (0) | 2025.05.19 |
| [Python] 1149번 RGB거리 (0) | 2025.05.18 |
| [Python] 9095번 1, 2, 3 더하기 (0) | 2025.05.18 |
| [Python] 2579번 계단 오르기 (0) | 2025.05.18 |