선발대

[스파르타] 99클럽 2기 코테스터디 17일차 TIL / 구명보트 본문

스파르타코딩클럽/활동 내용

[스파르타] 99클럽 2기 코테스터디 17일차 TIL / 구명보트

신선한 스타트 2024. 6. 5. 23:35

프로그래머스: 구명보트 (링크)

구명보트

 

우선 people 리스트를 오름차순으로 정렬해야 한다. 그리고 while문을 돌면서 deq의 0번째 인덱스와 마지막 인덱스의 요소를 더했을 때 limit보다 작은지 확인한다. 여기에서 작다면 pop(), popleft()로 둘을 제거하고 cnt += 1을 해준다. limit을 초과했을 경우는 제일 큰 수인 마지막 인덱스 요소만 pop()으로 제거해 준다. 모든 사람들의 각 몸무게는 보트의 한계를 넘지 않으므로 따로 if문 조건을 거치지 않고 pop()만 해주면 된다. 다만 여기 if문에서 0번째 인덱스와 마지막 인덱스 요소를 비교하기 때문에 deq에 1개의 요소만 남았을 때도 생각해 주면 된다.

 

from collections import deque

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

오늘 미들러 풀이 끝!

Comments