https://school.programmers.co.kr/learn/courses/30/lessons/42885#
def solution(people, limit):
answer = 0
people.sort()
min = 0
for max in range(len(people) - 1, -1, -1):
if min > max:
break
if people[max] + people[min] <= limit:
min += 1
answer += 1
return answer
문제 풀이
- 정렬을 한다.
- max 인덱스를 for문을 활용해서 높은 값부터 내려가면서 answer를 증가시킨다.(구명보트가 1씩 늘어나는 것)
- 앞의 인덱스의 값 + 뒤의 인덱스의 값 이 무게 제한을 초과하지 않는다면 min 인덱스를 증가시켜준다.
- min == max인 경우 왜 한번 반복문이 더 돌아가게 되는지 물어본다면?
-> 남은 인원이 한명일 경우 min == max: break 한다면 남은 인원을 보트에 태우지 못하게 되는 셈이다.
헤맸던 점
- 인덱스를 앞, 뒤로 나누고 이를 이동시키면서 보트의 개수를 증가시키는 방법이 처음에 떠오르지 않았다.