CodingTest/programmers

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

ukunV 2021. 9. 13. 23:48

Link

 

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

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

programmers.co.kr

 

Solution

해당 문제는 두 개의 인덱스 변수를 사용해야 한다는 것을 떠올리면 쉽게 해결할 수 있는 문제였다.

필자의 풀이에서는 한 구명보트에는 최대 두명이 탑승 가능하므로 가장 가벼운 사람과 가장 무거운 사람의 무게를 합쳤을 때 limit보다 무거우면 무거운 사람을 혼자 태우고 2번째로 무거운 사람과 가장 가벼운 사람을 다시 태워보는 풀이를 코드로 구현하였다.

def solution(people, limit):
    answer = 0

    people.sort()

    t1 = 0
    t2 = len(people) - 1
    while t1 <= t2:
        if people[t1] + people[t2] <= limit:
            t1 += 1

        t2 -= 1
        answer += 1

    return answer
🔑 key point: 두 개의 인덱스 변수 사용

 

Other Solution

해당 풀이는 예를 들어 5명에서 4명(2 * 2)이 같이 타고 1명이 따로 타는 경우 5 - 2(2명을 태운 보트 수)로 계산하는 형식으로 전체 인원 수에서 그룹 수를 빼는 형식으로 문제를 해결했다.

필자의 풀이와 answer(group) += 1을 해주는 위치만 다르지만 return 값이 answer이냐 len(people) - answer이냐의 차이가 있으므로 해당 풀이도 한번 확인해보고 지나가길 바란다.

def solution(people, limit):
    group = 0

    people.sort()

    a = 0
    b = len(people) - 1
    while a < b :
        if people[b] + people[a] <= limit :
            a += 1
            group += 1

        b -= 1

    return len(people) - group
🔑 key point: 두 개의 인덱스 변수 사용