자료구조&알고리즘

[알고리즘] 그리디 알고리즘 (탐욕법)

지윤공원🌳 2021. 3. 22. 01:26
728x90

그리디 알고리즘

그리디 알고리즘은 한국어로 하면 탐욕법이라는 뜻이다.순간마다 최적이라고 생각되는 선택을 하는 방식으로 진행하여 최종 답에 도달하는 문제 해결 방식이다.

 

1. 500, 100, 50, 10원 동전으로 거스름돈 주는 법

동전의 개수가 최소가 되도록 했을 때, 몇 개의 동전이 필요한지 구하는 문제이다. 

money = int(input(""))
cnt = 0
arr = [500, 100, 50, 10]
for a in arr:
    cnt += money // a
    money %= a
print(cnt)

 

2. 1이 될때까지 

N이 K로 나누어 떨어지면 N을 K로 나누고, 그렇지 않으면 1씩 뺀다.

1이 될 때까지 몇 번의 연산이 필요한지 구하는 문제이다. 

N, K = map(int, input("").split())
cnt = 0
while N != 1:
    if N % K == 0:
        N = N / K
    else:
        N = N - 1
    cnt += 1
print(cnt)

 

3. 더하기 혹은 곱하기 

숫자로 된 문자열이 입력되면 순서대로 연산을 하는데, +와 *연산자만 사용할 수 있다.

어떻게 해야 가장 큰 수가 결과로 나오게 할까

nums = input("")
result = int(nums[0])
for i in range(1, len(result)):
    num = int(nums[i])
    if num <= 1 or result <= 1:
        result += num
    else:
        result *= num
print(result)

 

4. 모험가 길드

공포지수가 N인 사람은 N명과 팀을 이뤄야 한다는 규칙에 맞춰 몇 개의 팀이 이뤄지는지 구하는 문제이다.

num = int(input(""))
person = list(map(int, input("").split()))
person.sort()
result, cnt = 0
for p in person:
    cnt += 1
    if cnt >= p:
        result += 1
        cnt = 0
print(result)

 

출처 : www.youtube.com/watch?v=2zjoKjt97vQ&t=2124s

728x90