개발
[알고리즘] 만들 수 없는 숫자 Python
mycloudy
2021. 7. 25. 18:30
나동빈 님의 "이것이 취업을 위한 코딩 테스트다 with 파이썬" 책에 수록된
만들 수 없는 숫자 문제입니다 (p.314)
이 문제는 그리디 유형으로 분류하셨습니다
그리디 알고리즘은 현재 상태에서 가장 좋은 것(최적)을 선택하는 알고리즘입니다
## 문제풀이 과정
[접근방법]
어떤 수까지를 만들 수 있다면, 거기에 하나 더 큰 수 (target)를 만들려고 하는 수로 놓습니다
예를들어 4까지 만들 수 있고 5를 만들 수 있는 지 확인하려고 합니다 (target = 5)
1,2,3,4를 만들 수 있으니 이번에 나온 수가 5와 같거나 작으면 5를 만들 수 있습니다
왜냐하면 5와 같으면 5를 만들 수 있고 5보다 작은 경우는 앞서에 만들 수 있었던 숫자 조합(1,2,3,4)에 이번 수를 더하면 만들 수 있기 때문입니다
이렇게 풀기 위해서 우선 수를 정렬하고
위의 접근 방법으로 문제를 해결합니다
from typing import List
def get_unreachable_integer(numbers: List[int]):
numbers.sort()
# 처음에 1을 만들 수 있는 상태인지 체크
target = 1
for number in numbers:
# 만들려는 숫자보다 현재 숫자가 더 크면 못 만듭니다
if target < number:
break
target += number
return target
## 문제를 풀고나서...
이리저리 한참을 고민해서 풀어보고 못 풀어서 답을 확인하고 풀이가 쉬워서 놀랐습니다
제 생각에는 정확히 그리디 알고리즘 문제는 아닌 거 같고
그리디 알고리즘의 근본적인 사고법(?)과 알고리즘 문제 많이 풀어본 능력이 있으면 풀 수 있다고 생각했습니다