탐욕법 (Greedy Algorithm) | 알고리즘

이남준·2021년 2월 4일
0

알고리즘

목록 보기
4/4
post-thumbnail

탐욕법 (Greedy Algorithm)

탐색 시 가능한 모든 경우를 일일이 다 탐색하는 방법

큰 수의 법칙

다양한 수로 이루어진 배열이 있을 때, 주어진 수들을 M번 더하여 가장 큰 수를 만드는 법칙
배열의 특정한 인덱스에 해당하는 수가 연속해서 K번을 초과하여 더해질 수 없다

N, M, K = map(int, input(). split())
nums = [int(n) for n in input().split()]
nums.sort(reverse=True)

sum = 0
while(True):
    for k in range(K):
        if M == 0:
            print(sum)
            break
        sum = sum + nums[0]
        M = M - 1
        
    if M == 0:
        print(sum)
        break
    sum = sum + nums[1]
    M = M - 1

숫자 카드 게임

여러 개의 숫자 카드 중에서 가장 높은 숫자가 쓰인 카드 한 장을 뽑는 게임
룰: 카드는 N X M 형태로 놓여 있다. 이 때 N은 행, M은 열 / 뽑고자 하는 카드가 포함되어 있는 행을 선택 / 그다음 행에 포함된 카드들 중 가장 숫자가 낮은 카드 뽑기

N, M = map(int, input().split())
max_ = 1

for n in range(N):
    li = [int(k) for k in input().split()]
    min_ = min(li)
    max_ = max(max_, min_)

print(max_)

1이 될 때까지

어떠한 수 N이 1이 될 때까지 N에서 1을 빼거나, N을 K로 나눈다(나누어 떨어질 때만)
최소한의 반복 회수 구하기

N, K = map(int, input().split())
count = 0

while True:
    while N % K == 0 and N != 1:
        N = N / K
        count = count + 1

    if N == 1:
        print(count)
        break

    N = N - 1
    count = count + 1
profile
iOS 개발자의 기록

0개의 댓글