이런 문제인데
정답 해설은 DP로 리스트 선언해서 풀었더라구요.
저는 조금 이상하게 접근했는데, 일단 책에 나온 입력예시 2개는 정답으로 나옵니다. 혹시 Test Case가 변화해도 정답처리되는 코드인지 확인해주실수 있을까요?
제가 이번에 코테 처음 준비하는 졸업생인지라... 완전 기초인거도 몰라서 부탁드리겠습니다. ㅠ
작성 코드 :
n , m = map( int , input().split())
cointype = []
for _ in range(n) :
cointype.append(int(input()))
cointype.sort(reverse = True)
count = 0
for i in cointype:
if m < i:
continue
if m % i == 0:
count += m // i
m = -1
break
else:
count += m // i
m = m % i
if m == -1:
print(count)
else:
print(-1)
이게 논리적으로 정답코드가 맞을까요?


문제가 이해안돼
입력 예시에 있는 첫번째 줄 n,m 은 각각 동전종류의 개수/ 만들어낼 금액 입니다. 그 이후 이어지는 숫자들은 동전종류들이구요! 예를 들어 첫 입력 예시는 2가지종류의 동전으로 15원을 만들어야하는데 동전은 2월짜리 3원짜리 인겁니다.
너무 어려워
ㅜㅜ 봐주셔서 감사합니다.
님 풀이는 가장 비용이 큰 화폐를 가장 많이 쓰는 그리디 풀이이고 화폐가 1원, 9원, 10원 / 금액이 18원인 상황을 생각해보면 반례가 쉽게 나옵니다. 님 풀이는 화폐가 서로 약수/배수 관계일때에만 사용 가능.
가장 비용이 큰 화폐를 가장 많이 쓰는 -> 매 순간마다 가장 비용이 큰 화폐를 최대한 많이 쓰는
아.. 아! 그렇군요..! 반례를 이렇게 빨리 찾으시다니; 제가 노력안한건가 싶기도하고.. 바쁘실텐데 핑프같은 질문 봐주셔서 감사합니다..!!
친절히 설명해주셔서 감사합니다.
핑프는 아니고 충분히 헷갈릴 수 있는건데 책에 관련 설명이 없었나보네여