본문 바로가기
카테고리 없음

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

by YGSEO 2021. 3. 12.
728x90

다른 사람의 풀이

def solution(people, limit):
    from collections import deque
    people.sort()
    people = deque(people)
    length = len(people)
    answer = 0
    while length != 0:
        limit_p = limit
        temp = 0
        pop = people.pop()
        length -= 1
        temp += pop
        limit_p -= pop
        if length >= 1:
            pop_r = people[0]
            if limit_p >= pop_r:
                people.popleft()
                length -=1
        answer+=1
    return answer

 

최상위 조건으로는 pop <= limit 일 경우 ans += 1인데

이는 문제에서

"구명보트의 무게 제한은 항상 사람들의 몸무게 중 최댓값보다 크게 주어지므로

사람들을 구출할 수 없는 경우는 없습니다."

라고 언급되어있기 때문에 pass

 

이 조건 하에서는 이제

2가지 조건을 만족시키도록 구현하면 된다.

1. 한 사람만 들어갈 수 있는 경우

2. 두 사람만 들어갈 수 있는 경우

 

- 2가지 경우 모두 count += 1

- pop을 하면서 큐 자료구조를 사용하면 된다.

- 다만, 2번의 경우 다음 element와 pop한 element를 합친 결과를 비교해야되는데, next element의 경우 pop을 하지않고 zero idx의 값을 가져와서 비교한 후 limit 보다 less or equal to 일 경우, 즉 조건이 만족되면 pop을 해줌으로써 기존 queue에서 제거

 

728x90

댓글