
아래 프로그래머스 로고를 클릭하면 해당 문제로 이동합니다 😀
정렬 + 투포인터를 사용하면 최소 보트 개수를 구할 수 있다.
people를 오름차순 정렬한 후, "가장 가벼운 사람(left) + 가장 무거운 사람(right)의 합이 limit 이하" 이면 한 보트에 같이 탑승시킨다.
아니면 무거운 사람(right)만 보트에 태워서 보낸다.
left > right가 될 때 까지 반복하면 된다 !
def solution(people, limit):
people.sort()
left = 0
right = len(people) - 1
boats = 0
while left <= right:
if people[left] + people[right] <= limit:
left += 1
right -= 1
boats += 1
return boats
function solution(people, limit) {
const sortPeople = people.sort((a, b) => a - b);
let left = 0, right = sortPeople.length - 1;
let boats = 0;
while(left <= right){
if(sortPeople[left] + sortPeople[right] <= limit) left++;
right--;
boats++;
}
return boats;
}
