본문 바로가기

Algorithm/Greedy

만들 수 없는 금액

 

문제 

N개의 동전을 사용해 만들 수 없는 양의 정수 금액 중 최솟값을 구하는 프로그램

 

유형 분석

최솟값을 구하며 딱히 다른 알고리즘이 생각나지 않는다.

 

아이디어

주어진 숫자리스트를 작은 순서대로부터 확인을 하면서

만들 수 있는 금액 체크 여부를 1부터 시작해서 차근차근 가능한지 확인한다.

 

과정은 다음과 같다.

1원을 만들 수 있는가? -> 1원이 있어야만 한다.  -> 없다면 종료, 있다면 현재 만들 수 있는 최대 금액은 1원디다.

2원을 만들 수 있는가? -> 1원 또는 2원이 있어야만 한다.  -> 없다면 종료, 있다면 현재 만들 수 있는 최대 금액은 3원, 4원디다. 

...

 

이런식의 아이디어를 갖는다.

 

예를 들어, [1, 1, 4, 5, 6]

작은거 부터 확인해보면,

1원으로 1원까지 만들 수 있다.

1원으로 2원까지 만들 수 있다.

4원으로 3원을 만들 수 있다. -> 3원 종료

 

구현

1. 리스트를 오름차순으로 정렬

2. 확인금액(target)을 1로 한다.

3. 리스트를 하나씩 꺼내서 확인 금액(target)이 꺼낸 금액보다 작으면 종료

4. 만약 확인하려는 금액이 크면 확인 금액(target) += 꺼낸 금액

 

 

코드

num = map(int, input("입력 : "))
num.sort()
target = 1
for i in num:
    if target < i:
        break
    target += i
print(target)

 

 

 

'Algorithm > Greedy' 카테고리의 다른 글

볼링공 고르기  (0) 2023.04.08
문자열 뒤집기  (0) 2023.04.05
곱하기 혹은 더하기  (0) 2023.04.04
모험가 길드  (0) 2023.04.04
1이 될 때까지  (0) 2023.04.04