문제
첫번쨰 입력줄엔 1에서 1000까지의 동전의 갯수가 n이 주어진다.
두번째줄에는 n개의 동전의 화폐 단위를 나타내는 숫자가 차례 대로 들어온다.
출력으로 주어진 동전들로 만들 수 없는 양의 정수 금액 중 최솟값을 출력한다.
입력 예시
5
3 2 1 1 9
출력
8
해결 방법
전형적인 정렬 그리디 문제입니당.
만들 수 없는 숫자를 찾을 떄까지 target을 업데이트한다.
예를 들어 3 2 1 1 9 의 입력이 들어오면 정렬한 1 1 2 3 9인데,
target이 1일 때, 입력 숫자 중의 1이 있으니 만들 수 있기 때문에 target을 1+1 =2 로 업데이트
target이 2일 때 입력 숫자 중 1이 두개로 만들 수 있으므로 target을 2+1=3로 업데이트
target 3일 때, 입력 숫자 중 2와 1로 만들 수 있으므로 target을 2+3=5로 업데이트
target 5일 때, 입력숫자 3과 2로 만들 수 있으므로 target을 5+3=8로 업데이트
target 8일 때, 만들 수 없으므로 정답은 8
이런식으로 target을 업데이트하며 만들 수 없을 때까지 업데이트해서 확인해준다.
코드
n=map(int,input())
coin=list(map(int, input().split()))
coin=sorted(coin, reverse=True)
minval=1
for x in coin :
if minval <x :
break
else :
minval+=x
answer=minval
print(answer)
※<이것이 취업을 위한 코딩테스트다(나동빈 저)>를 참고하여 작성되었습니다.
'코딩테스트 문제풀이' 카테고리의 다른 글
[이것이 코딩테스트다] 무지의 먹방라이브 (0) | 2022.08.28 |
---|---|
[이것이 코딩테스트다] 볼링공 고르기 (1) | 2022.08.28 |
[이것이 코딩테스트다] 문자열 뒤집기 (0) | 2022.08.28 |
[이것이 코딩테스트다] 이진탐색 부품찾기 (0) | 2022.08.11 |
[이것이 코딩테스트다] 구현 (3) 게임개발 (0) | 2022.08.09 |