만들 수 없는 금액
책 314p
문제
- 시간 제한
- 1초
- 입력
- 첫째줄에는 동전의 갯수 나타내는 N (1<=N<=1,000)
- 둘째줄에는 각 동전의 화폐단위를 나타내는 N개 자연수 (각 화폐단위는 1,000,000 이하의 자연수)
- 출력
- 주어진 동전들로 만들 수 없는 양의 정수 금액 중 최솟값을 출력
- 1초
- 첫째줄에는 동전의 갯수 나타내는 N (1<=N<=1,000)
- 둘째줄에는 각 동전의 화폐단위를 나타내는 N개 자연수 (각 화폐단위는 1,000,000 이하의 자연수)
- 주어진 동전들로 만들 수 없는 양의 정수 금액 중 최솟값을 출력
N개의 동전을 이용하여 만들 수 없는 양의 정수 금액 중 최솟값을 구하시오.
예시) N=5, [3,2,1,1,9] 원의 동전이 있을때,
만들 수 없는 양의 정수 금액 중 최솟값은 8원
풀이방법
처음 든 생각
브루트 포스로 만큼 모든 조합을 계산할까?
안되는 이유 -> 의 경우, 조합의 갯수 r이 n보다 작아야하는데
동전이 n보다 더 많이 더해질 수도 있다.
그렇게 벗어나는 값을 확인할 수 없다.
풀이 아이디어
- 오름차순으로 정렬
2.1부터 차례대로 특정한 금액 만들 수 있는지 확인
예시) [1,2,3,8] 이 주어졌을때
- 처음에는금액 1을 만들 수 있는지 확인하기 위해 target=1로 설정
- target = 1 만족할 수 있는지 확인. 동전 1을 이용해서 만들 수 있으므로, target = 1+1= 2로 업데이트 (=1까지의 모든 금액을 만들 수 있다.)
- target = 2 만족할 수 있는지 확인. 동전 2을 이용해서 만들 수 있으므로, target = 2+2 = 4로 업데이트 (=3까지의 모든 금액을 만들 수 있다.)
- target = 4 만족할 수 있는지 확인. 동전 3을 이용해서 만들 수 있으므로, target = 4+3 = 7로 업데이트 (=6까지의 모든 금액을 만들 수 있다.)
- target = 7 만족할 수 있는지 확인. 이보다 더 큰, 화폐 단위인 8인 동전이 있으므로, 금액 7을 만드는 방법은 없다. 따라서 정답은 7
풀이 코드
n = int(input())
data = list(map(int, input().split()))
data.sort()
target = 1
for x in data:
# 만들 수 없는 금액을 찾았을 때 반복 종료
if target < x :
break
target += x
# 만들 수 없는 금액 ㅜㄹ력
print(target)
느낀점
- 이게 왜 최적을 보장하지? 라는 의문
풀어 말하면 [이전의 가능한 범위] + [새로 포함시키는 동전] = [새로운 가능한 범위] 가 어떻게 가능한거지?
- 일단
이걸 왜 단정할 수 있는지 납득이 안됐음.
- 만약 [1,2,3,5] 이 있으면 1부터 6까지 만들 수 있다고 체크했다고 생각하자 (동전 1,2,3 까지 포함 완료)
- 1원 = 1
- 2원 = 2
- 3원 = 3
- 4원 = 1+3
- 5원 = 2+3
- 6원 = 1+2+3
- 금액 5를 포함시키면, 6+5=11 까지의 금액을 만들 수 있다.
다음과 같다.
이렇게 5가 더해질뿐, 이전의 패턴이 똑같이 반복되는 것이므로,
[이전의 가능한 범위] + [새로 포함시키는 동전] = [새로운 가능한 범위] 가 가능하게 된다.
풀어 말하면 [이전의 가능한 범위] + [새로 포함시키는 동전] = [새로운 가능한 범위] 가 어떻게 가능한거지?
- 일단
이걸 왜 단정할 수 있는지 납득이 안됐음. - 만약 [1,2,3,5] 이 있으면 1부터 6까지 만들 수 있다고 체크했다고 생각하자 (동전 1,2,3 까지 포함 완료)
- 1원 = 1
- 2원 = 2
- 3원 = 3
- 4원 = 1+3
- 5원 = 2+3
- 6원 = 1+2+3
- 금액 5를 포함시키면, 6+5=11 까지의 금액을 만들 수 있다.
다음과 같다.
이렇게 5가 더해질뿐, 이전의 패턴이 똑같이 반복되는 것이므로,
[이전의 가능한 범위] + [새로 포함시키는 동전] = [새로운 가능한 범위] 가 가능하게 된다.
오호라~ 글쿤 다시 풀자 외우자 ㅎㅎ
Author And Source
이 문제에 관하여(만들 수 없는 금액), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yesterdaykite/만들-수-없는-금액저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)