알고리즘 문제 풀이/프로그래머스

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

잘잔디 2023. 3. 28. 14:15

문제링크 :https://school.programmers.co.kr/learn/courses/30/lessons/42885

 

프로그래머스

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

programmers.co.kr

문제 설명 

  • 처음 문제를 접했을 때 최대 무게가 고정되어 있기에 Greedy임을 파악하여, 정렬 후 앞뒤 값을 비교하여 제거하는 방식을 사용하였다.

내 코드

from collections import deque
def solution(people, limit):

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

    if people:answer+=1
    return answer

다른 사람들의 코드

def solution(people, limit) :
    answer = 0
    people.sort()

    a = 0
    b = len(people) - 1
    while a < b :
        if people[b] + people[a] <= limit :
            a += 1
            answer += 1
        b -= 1
    return len(people) - answer
  • index를 사용해 people에 접근하는 방식이 인상적이었다.
  • pop 연산도 시간복잡도가 상수단위이기 때문에 크게 다르지 않겠지만 구조적으로 더 간결해 보이며 조건문이 적었다.