가장 무거운 사람의 무게 + 가장 가벼운 사람의 무게
를 구해서 인자로 주어진 limit
과 비교한다.limit
이 크다면 가장 무거운 사람과 가장 가벼운 사람이 한 보트에 같이 탈 수 있다.limit
이 작다면 가장 무거운 사람은 혼자 보트에 타야한다.def solution(people, limit):
answer = 0
people.sort()
# two pointer
l = 0
r = len(people)-1
while l <= r:
# 마지막 한 명이 남게된다면 그 한명을 보트에 태우고 종료
if l == r:
answer += 1
break
tmp = people[l] + people[r]
if tmp <= limit:
l += 1
r -= 1
answer += 1
# 가장 무게가 많이 나가는 사람 한명을 보트에 태운다.
else:
r -= 1
answer += 1
return answer
사람들을 보트에 태울 때마다 리스트 people
삭제하도록 pop()
연산자를 많이 썼다. 이게 맨 마지막 원소만 제거했다면 시간복잡도에 문제가 없었겠지만, 가장 가벼운 사람을 보트에 태우는 경우에는 pop(0)
을 해야 하는데 이는 O(N)의 시간복잡도이기 때문에 시간 초과가 발생했다.
이를 해결하는 좋은 방법은 two pointer
라는 것을 알게 되었다.