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: 두 개의 인덱스 변수 사용