그리디 알고리즘
- 그리디 알고리즘은 현재 상황에서 지금 당장 좋은 것만 고르는 방법을 의미함
- 일반적인 그리디 알고리즘은 문제를 풀기 위한 최소한의 아이디어를 떠올릴 수 있는 능력을 요구함
- 단순히 가장 좋아 보이는 것을 반복적으로 선택해도 최적의 해를 구할 수 있는지를 검토함
거스름 돈
- 500원, 100원, 50원, 10원 동전이 존재할 때 거슬러 줘야하는 최소한의 동전의 개수를 구하시오
n = 1260
coins = [500, 100, 50, 10]
result = 0
for coin in coins:
result += n//coin
n = n%coin
print(result)
1이 될 때까지
- 어떠한 수 N이 1이 될 때까지 다음의 두 과정 중 하나를 반복적으로 선택하여 수행하려고 함
- N에서 1을 뺀다
- N을 K로 나눈다.
- N과 K가 주어질 떄 N이 1이 될때까지 1번 혹은 2번의 과정을 수행해야하는 최소 횟수를 구하는 프로그램을 작성하시오
n, k = 27, 3
result = 0
while True:
target = (n//k) * k
result += (n - target)
n= target
if n<k:
break
n //= k
result+=1
print(n, result)
result += (n-1)
print(n, result)
곱하기 혹은 더하기
- 각 자리가 숫자로만 이루어진 문자열 S가 주어졌을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 숫자 사이에 x 혹은 + 연산자를 넣어 결과적으로 가장 큰 수를 구하는 프로그램을 작성하세요.
data = "02984"
result = int(data[0])
for i in range(1, len(data)):
num = int(data[i])
if num <= 1 or result <=1:
result += num
else:
result *= num
print(result)
모험가 길드
- 한 마을에 모험가가 N명 있음, 모함가 길드에서는 N명의 모험가를 대상으로 ‘공포도’를 측정했는데, ‘공포도’도가 높은 모험가는 쉽게 공포를 느껴 위험 상황에서 제대로 대처할 능력이 떨어짐
- 공포도가 X인 모험가는 반드시 X명 이상으로 구성한 모험가 그룹에 참여해야 여행을 떠날 수 있도록 규정
- 여행을 더날 수 있는 그룹 수의 최댓값을 구하시오
n = 5
data = [2, 3, 1, 2 ,2]
result = 0
count = 0
for i in data:
count+=1
if count >= i:
result+=1
count=0
print(result)