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

[프로그래머스] 구명보트 - Python

by whereisco 2023. 3. 30.

문제

lv2. 구명보트

 

접근 방식

  • 그리디와 투포인터를 이용해 해결할 수 있는 문제입니다. 이 문제는 마땅한 해결책을 찾지 못해 레퍼런스를 보며 이해한 문제입니다.
  • 투포인터를 활용하기 위해 먼저 몸무게가 저장된 리스트를 오름차순 정렬해줍니다. 이 후, 시작 인덱스와 끝 인덱스를 각각 0과 len(무게 리스트)-1로 지정해 줍니다.
  • 이 후, 시작 인덱스가 끝 인덱스보다 작거나 같을 동안, (가벼운 사람의 무게 + 무거운 사람의 무게) limit값 보다 작거나 같으면 시작 인덱스를 +1 해주고, 그렇지 않은 경우에는 끝 인덱스에 -1을 설정해줍니다.
  • 시작 인덱스를 +1, 끝 인덱스를 -1로 설정한 부분은 각각 더 큰 값과 작은 값을 찾아 나가기 위해 지정한 걸로 이해하면 될 것 같습니다.
  • 모든 사람을 구출하기 위해 필요한 구명보트 개수의 최솟값을 리턴해줍니다.

코드

def solution(people, limit):
    answer = 0
    #무게 순으로 정렬
    people.sort()
    #투포인터 선언
    s=0
    e=len(people)-1
    #시작 포인터가 끝 포인터보다 작을 동안
    while s<=e:
        #경우의수 + 1, (가벼운 사람의 무게 + 무거운 사람의 무게)가 limit을 넘으면, 한명만 태우는 경우이므로
        answer+=1
        if people[s] + people[e] <= limit:
            s+=1
        e-=1
    return answer