반응형
조건
구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고
사람의 몸무게는 40kg 이상 240kg 이하
구명보트의 무게 제한은 40kg 이상 240kg 이하
구명보트의 무게 제한은 항상 사람들의 몸무게 중 최댓값보다 크게 주어짐
자바스크립트 풀이
people.sort((a,b) => a-b); // [70, 50, 80, 50] -> [50, 50, 70, 80]
우선 people을 오름차순으로 정렬한다.
let answer = 0, left = 0, right = people.length -1;
// people[left] = 50 , people[right] = 80
변수를 위와 같이 선언한다.
answer = 구명보트 수 / left, right = 태울 사람의 무게를 고르기 위한 인덱스
초기에 left번째 사람은 가장 가벼운 사람을 right번째 사람은 가장 무거운 사람을 의미한다.
people을 오름차순으로 정렬한 이유도 가장 가벼운 사람과 무거운 사람부터 보트에 태운다고 가정하며 문제를 풀어나가기 위해서다.
while(left <= right){
if(people[left] + people[right] <= limit){
left++;
}
right--;
answer++;
}
left가 right보다 작거나 클때까지를 기준으로 while문이 동작할 것이다.
left번째와 right번째 사람의 무게를 더했을 때 주어진 limit 즉 구명 보트의 무게 제한보다 크면 해당 두 사람이 같이 한 보트에 탈 수 없는 것을 의미한다.
if(people[left] + people[right] <= limit){
left++;
}
이와 같이 두 사람의 무게 합이 limit 이하인 경우엔 두 사람을 한 보트에 태운다.
한 보트에 left 번째와 right 번째 사람을 태웠으므로 left와 right는 각각 left+1 ( 그 다음 가벼운 사람 ), right-1( 그 다음 무거운 사람 ) 로 값을 변경해준다. 그리고 보트에 두 사람을 태웠으므로 answer도 1 증가한다.
return answer;
과정을 통해 구한 answer를 반환하면 끝이다.
전체 코드는 다음과 같다.
function solution(people, limit) {
people.sort((a,b) => a-b);
let answer = 0, left = 0, right = people.length -1;
while(left <= right){
if(people[left] + people[right] <= limit){
left++;
}
right--;
answer++;
}
return answer;
}
반응형
'자료구조 & 알고리즘' 카테고리의 다른 글
유클리드 호제법 - 최대공약수 구하기 (자바스크립트 코드) (0) | 2025.01.04 |
---|---|
프로그래머스 영어 끝말잇기 - 자바스크립트 풀이 (0) | 2025.01.01 |
프로그래머스 귤 고르기 - 자바스크립트 풀이 🍊 (0) | 2024.12.11 |
프로그래머스 카펫 - 자바스크립트 풀이 (0) | 2024.12.10 |
프로그래머스 다음 큰 숫자 - 자바스크립트 풀이 (0) | 2024.12.08 |