import sys
# sys.stdin.readline()
from collections import deque
sys.setrecursionlimit(100000000)
import heapq
import copy
import itertools
from itertools import combinations
from itertools import permutations
INF = 1e9
N,M = map(int,sys.stdin.readline().split())
d = [10001] * (M+1)
coin = [0]
for _ in range(N):
value = int(sys.stdin.readline().rstrip())
coin.append(value)
d[value] = 1
for i in range(1,M+1):
for j in range(1,N+1):
if d[i-coin[j]]!=10001:
d[i] = min(d[i-coin[j]] + 1,d[i])
if d[M] == 10001:
print(-1)
else:
print(d[M])
혼자서 거의 다 풀어서 매우 기쁘다..
M값의 상한이 10000이므로 배열 전체를 10001로 초기화해주었다.
만약 d[i-coin[j]]가 10001이 아니라는것은
조합을 할 수 있는 방법이 존재한다는 의미이므로
d[i]를 현재값과 d[i-coin[j]] 값과 비교해준다(더 큰 화폐가치를 사용했었다면 원래의 d[i] 값이 더 작을 수 있다)
조금은 뿌듯하지만
아직도 문제를 봤을 때 dp로 풀어야 할지 아닐지 딱 보이려면
너무 멀었다.. 지금은 dp 단원을 공부하고 있으니까 풀이법이 보이는거지만
코테는 절대 단원명을 명시해주지 않는다
더 열심히 하자
파이팅
'알고리즘 문제 풀이 > 이코테' 카테고리의 다른 글
[이코테] CH08 다이나믹 프로그래밍 실전문제 32번 정수 삼각형 (0) | 2024.01.12 |
---|---|
[이코테] CH08 다이나믹 프로그래밍 실전문제 31번 금광 (0) | 2024.01.11 |
[이코테] CH08 다이나믹 프로그래밍 실전문제 4번 바닥 공사 (0) | 2024.01.09 |
[이코테] CH08 다이나믹 프로그래밍 실전문제 3번 개미 전사 (1) | 2024.01.09 |
[이코테] CH08 다이나믹 프로그래밍 실전문제 2번 1로 만들기 (1) | 2024.01.09 |