본문 바로가기

Python

[Greedy] 프로그래머스_구명보트

https://school.programmers.co.kr/learn/courses/30/lessons/42885

 

프로그래머스

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

programmers.co.kr

풀이 

바로 보자마자 deque를 사용해주고자 하는 생각이 들었다. 그 이유는 리스트의 원소가 빠져나갈때마다 pop을 해주면서 queue의 길이를 계속해서 줄여주고 싶었기 때문이다. 

  • deque()를 활용해서 큐 자료구조를 사용한다 
  • deque의 메소드인 pop()과 popleft()를 활용하여 가장 큰값과 가장 작은 값을 기준으로 sum이 limit 값보다 작은지를 먼저 확인하게 된다. 
    • 작거나 같으면 큐로부터 두 값을 pop해준다.
  • limit 값보다 항상 몸무게는 작다라는 전제가 있기 때문에 따로 조건문으로 추가해줄 필요는 없다. 
  • else문에서는 1명씩 타야할 경우이다. 
  • answer에 1씩 더해주면 총 경우의 수를 출력할 수 있다. 
  • len(queue)==1 일 경우를 구해주는 이유는 큐의 길이가 1일 경우에는 한사람밖에 남지 않은 경우이므로 이때에는 answer에 1 더해주고 while문을 탈출한다. 
from collections import deque
def solution(people, limit):
    answer = 0    
    people.sort()
    queue = deque(people)
    while queue:
        if len(queue) == 1:
            answer += 1 
            break
        if queue[0] + queue[-1] <= limit:
            queue.popleft()
            queue.pop()
        else:
            queue.pop()
        answer += 1
    return answer

print(solution([70, 80, 50, 50], 100))

으음 통과요 ~ 

 

'Python' 카테고리의 다른 글

[python] input() 속도 초과  (0) 2022.03.14
[Python] 리스트  (0) 2021.01.25
[Python] 조건문  (0) 2021.01.23
[ Python] 입력함수  (0) 2021.01.22
[Python] 출력함수  (0) 2021.01.21