Programmers

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

Hoo_Dev 2023. 2. 13. 15:34
from collections import deque

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

    return answer

deque를 사용하지 않으면 효율성 1번에서 탈락되는 코드

 

풀이 방식은

 

오름차순 sort 후

 

몸무게가 가장 작은 사람(people의 첫번째 원소)  + 몸무게가 가장 많은 사람(people의 마지막 원소) <= limit 인 점을 활용해야 한다.

 

최소 2개의 원소가 존재해야 people[0]과 people[-1]을 비교할 수 있으므로 while문의 조건을 len(people) > 1 로 바꿔주고, 만약 people의 길이가 1이 남았을 땐, 한명만 보트에 싣고 옮겨야 하기 때문에 +1을 해준다.