문제풀이/Greedy

[Python/파이썬] 프로그래머스 구명보트

딜레이레이 2022. 10. 25. 15:10
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

코드

from collections import deque

def solution(people, limit):
    answer = 0
    people = deque(sorted(people))
    while people:
        if len(people) == 1:
            answer += 1
            break
        if people[0] + people[-1] <= limit:
            people.popleft()
        people.pop()
        answer += 1

    return answer

구명보트의 제한인원이 2명뿐이기에 아주 쉽게 풀 수 있는 문제였다.

사람들을 무게 오름차순으로 정렬한 뒤 앞뒤에서 뽑아내기 위해 deque를 사용했다.

현재 people 배열에 있는 사람 중 가장 무거운 사람과 가장 가벼운 사람이 배열의 맨 앞과 맨 뒤에 있는데 이 둘을 짝지었을 때 무게 합이 limit을 넘지 않는다면 같이 태우고, limit을 넘는다면 현재 가장 무거운 사람은 people 배열에 있는 그 누구와도 같이 보트에 탈 수 없으니 그 사람만 태우면 된다.