본문 바로가기

두두의 알고리즘/문제

[탐욕법] 프로그래머스 L2 '구명보트' (Python)

728x90

<문제 링크>

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

 

코딩테스트 연습 - 구명보트

무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5

programmers.co.kr


<문제 풀이>

  1. people이 정렬이 되어있지 않으므로 정렬 시킴
  2. 3~5 반복
  3. 해당 몸무게가 limit의 반 값보다 작고 people의 마지막 몸무게라면 answer에 1을 더하고 반복문 종료
  4. 해당 몸무게와 people의 마지막 몸무게를 합한 값이 limit보다 작으면 answer에 1을 더하고 마지막 몸무게 삭제
  5. 해당 몸무게와 people의 마지막 몸무게를 합한 값이 limit보다 크면 answer에 1을 더함

<코드>

def solution(people, limit):
    answer = 0
    people.sort(reverse=True)
    
    for idx,i in enumerate(people):
        if i <= limit//2 and idx==people[-1]:
            answer += 1
            break
        if i+people[-1] <= limit:
            answer+=1
            people.pop()
        else:
            answer+=1
            
    return answer

 

<고쳐야 할 점>

  • max(people) + min(people) <= limit의 성립 조건만 이해하면 됨
  • len(배열)은 배열.pop() 해도 반영이 안 됨