Algorithm

[프로그래머스] 구명보트 - Python

lerrybe 2022. 12. 4. 09:46

문제


 

코딩테스트 연습 - 구명보트

무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5

programmers.co.kr

 

 

 

풀이


해당 문제는 그리디를 이용해 해결했습니다.

오름차순으로 people 배열을 정렬해준 뒤, 왼쪽 커서와 오른쪽 커서를 지정해줍니다.

인덱스에 해당하는 사람이 구명보트를 타고 떠나면, 인덱스를 옮겨줍니다.

 

왼쪽 커서와 오른쪽 커서가 같아질 때까지 반복문을 도는데, 

people[left] + people[right] 값이 limit 값을 넘으면 오른쪽 인덱스에 해당하는 사람만 보트에 보내고 (right -= 1), 

people[left] + people[right] 값이 limit 값과 같거나 넘지 않으면

왼쪽 인덱스, 오른쪽 인덱스에 해당하는 사람들 모두 보트에 태워 보냅니다 (left += 1, right -= 1). 

 

보트가 하나 떠날 때마다 카운트를 높여줍니다.


💡 풀이 코드는 아래와 같습니다. 

def solution(people, limit):
    people.sort()

    left = 0
    right = len(people) - 1
    count = 0

    while left <= right:
        if people[left] + people[right] > limit:
            right -= 1
            count += 1
        else:
            left += 1
            right -= 1
            count += 1

    return count

🔧 리팩토링한 코드는 아래와 같습니다. 

def solution(people, limit):
    people.sort()

    left = 0
    right = len(people) - 1
    count = 0

    while left <= right:
        if people[left] + people[right] <= limit:
            left += 1
        right -= 1
        count += 1

    return count