- 처음에는 오름차순으로 정렬해서 순차적 비교로 하려 했으나 실패
- 따라서, 현재 리스트를 오름차순으로 정렬하여 deque로 만든 후, 왼쪽, 오른쪽에서 하나씩 빼면서 비교 (최소, 최대)
- 현재 deque에서의 최소 요소 + 현재 deque에서의 최대 요소가 limit보다 작다면 두개를 동시 pop
- 현재 deque에서의 최소 요소 + 현재 deque에서의 최대 요소가 limit보다 크다면 최대 요소만 pop
- 최소 요소밖에 없는 경우에는 최소 요소 pop
- 각각의 pop 과정마다 answer을 1씩 증가시켜 주면 된다.
from collections import deque
def solution(people, limit):
answer = 0
people.sort()
deq = deque(people)
sumation = 0
while deq:
left = deq.popleft() # 남아있는 사람 중 최소 무게 한명 뺌
right = 0
while deq: # 최대 무게에서 순차적으로 내려가면서 최소 + 최대가 limit보다 작은 경우까지 반복
right = deq.pop()
if left + right <= limit:
break
else:
answer += 1
answer += 1
return answer
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
'알고리즘[Python] > 프로그래머스' 카테고리의 다른 글
[ Lv 2 ] [1차] 프렌즈4블록 (0) | 2021.06.27 |
---|---|
[ Lv 2 ] 영어 끝말잇기 (0) | 2021.06.27 |
[ Lv 2 ] 다리를 지나는 트럭 (0) | 2021.06.26 |
[ Lv 2 ] 카펫 (0) | 2021.06.26 |
[ Lv 2 ] 위장 (0) | 2021.06.26 |