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

Nina·2021년 2월 9일
0

알고리즘 연습

목록 보기
8/11
post-thumbnail

1. 그리디

그리디 알고리즘은 현재 상황에서 당장 좋은 것을 고르는 방법으로, 현재의 선택이 나중에 미칠 영향은 고려하지 않는다. 이는 기준에 따라 좋은 것을 선택하는 알고리즘이기 때문에 '가장 큰 순서대로', '가장 작은 순서대로'와 같은 기준이 제시된다.

2. 예시 문제

(1) Baekjoon Online Judge

n = int(input())
if n % 5 == 0:
    print(n//5)
else:
    a = 0
    while n > 0:
        if n <= 12 and n%3 == 0:
            print(a + n//3)
            break
        n -= 5
        a += 1
    else:
        print(-1)

n = int(input())
minutes = list(map(int, input().split()))

minutes.sort()
result = 0
for i in range(1,n+1):
    result += sum(minutes[0:i])

print(result)

(2) 프로그래머스

def solution(number,k):
    answer = number[0]
    for i in number[1:]:
        while k > 0 and len(answer) > 0 and i > answer[-1]:
            k -= 1
            answer = answer[:-1]
        answer += i
    if k != 0:
    	answer = number[:-k]
    return answer

def solution(people, limit):
    people.sort()
    light = []
    heavy = []
    half = limit//2
    answer = 0

    for x in people:
        if x <= half:
            light.append(x)
        else:
            heavy.append(x)

    while len(light) > 0 and len(heavy) > 0:
        if light[0] + heavy[-1] <= limit:
            answer += 1
            light.pop(0)
            heavy.pop()
        else:
            answer += 1
            heavy.pop()

    if len(light) > 0:
        if len(light) % 2 == 0:
            answer += len(light) // 2
        else:
            answer += len(light) // 2 + 1
    else:
        answer += len(heavy)

    return answer
profile
https://dev.to/ninahwang

0개의 댓글