01.그리디 알고리즘
- 그리디 알고리즘(탐욕법) 은 현재 상황에서 지금 당장 좋은 것만 고르는 방법을 의미합니다.
- 일반적인 그리디 알고리즘은 문제를 풀기 위한 최소한의 아이디어를 떠올릴 수 있는 능력을 요구합니다.
- 그리디 해법은 그 정당성 분석이 중요합니다.
- 단순히 가장 좋아 보이는 것을 반복적으로 선택해도 최적의 해를 구할 수 있는지 검토합니다.
- 일반적인 상황에서 그리디 알고리즘은 최적의 해를 보장할 수 없을 때가 많다
- 코테에서 대부분 그리디 문제는 탐욕법으로 얻은 해가 최적의 해가 되는 상황에서, 이를 추론할 수 있어야 풀리도록 출제된다.
<문제> 거스름 돈문제>
n = 1260
count = 0
array = [500, 100, 50, 10]
for coin in array:
count += n // coin
n %= coin
print(count)
<문제> 1이 될 때까지문제>
def solution(n, k):
count = 0
while n != 1:
if n % k == 0:
n = n // k
else:
n -= 1
count += 1
return count
print(solution(10, 3))
print(solution(17, 3))
print(solution(25, 5))
<문제> 더하기 혹은 곱하기문제>
# 내풀이
def solution(s: str):
s = list(s)
while len(s) != 1:
ff, ss = s.pop(0), s.pop(0)
if ff in ["0", "1"] or ss in ["0", "1"]:
temp = int(ff) + int(ss)
else:
temp = int(ff) * int(ss)
s.insert(0, str(temp))
return int(s[0])
# 다른 풀이
def solution(s):
result = int(s[0])
for i in range(1, len(s)):
num = int(s[i])
if num <= 1 or result <= 1:
result += num
else:
result *= num
return result
print(solution("02984"))
print(solution("567"))
<문제> 모험가 길드문제>
# 내 풀이
def solution(fears: list[int]):
fears.sort(reverse=True)
count = 0
while fears:
num = fears[0]
for _ in range(num):
fears.pop(0)
count += 1
return count
print(solution([2, 3, 1, 2, 2]))
# 영상 풀이
n = int(input())
data = list(map(int, input().split()))
data.sort()
result = 0 # 총 그룹의 수
count = 0 # 현재 그룹에 포함된 모험가의 수
for i in data: # 공포도가 낮은것부터 하나씩 확인
count += 1
if count >= i:
result += 1
count = 0
print(result)
댓글남기기