목적 : 구명보트를 적게 사용하여 사람을 구출할 수 있는 최솟값
구명보트 조건
1. 한번에 최대 2명
2. 사람들의 몸무게 people 배열
3. 무게 제한 limit 존재
처음에 Pop을 이용하여 계산을 하였지만 효율성 테스트에서 점수를 받지 못하였다. 그래서 빼기 보다 조회를 하며 순환하는 이진 탐색 기법을 차용하여 앞 뒤가 서로 만나는 지점을 찾도록 하였다.
def solution(people, limit):
answer = 0
people.sort()
first = 0
last = len(people) - 1
while True:
if last == first:
answer += 1
break
if last < first:
break
# 2명 타는 경우
if people[first] + people[last] <=limit:
answer += 1
first += 1
last -= 1
# 1명 타는 경우
else:
last -= 1
answer += 1
return answer