일반 학습/코딩 테스트
[프로그래머스] 구명보트
StelthPark
2022. 3. 28. 17:02
처리순서
풀이
처음에는 people배열을 받아서 sort로 낮은수부터 높은수까지 정렬 오름차순 정렬을 해서 가장작은값부터 순서대로 넣었는데 가장 작은 값과 가장큰값을 비교해서 넣어줘야 최소한의 구명보트를 조합할 수 있다.
가장 큰값과 가장 작은 값을 더해서 받은 limit보다 작거나 같다면 보트에 실어 보낼 수 있다. 그렇지 않다면 다음값인 70과 가장 작은 값 50을 똑같이 더해본다. 만약 처음부터 둘의 합이 조건에 만족한다면 그안쪽으로 한칸씩 이동시켜 안에 두번째로 가장큰 값과 두번째로 가장 작은값을 비교하게 된다.
이 문제는 어떻게 최소한의 구명보트수를 계산할 것인가를 통해 어떻게 비교 덧셈을 할지 잘 파악해야할 것 같다.
function solution(people, limit) {
let answer = 0;
people.sort((a, b) => b - a);
console.log(people);
let lt = 0;
let rt = people.length - 1;
while (lt <= rt) {
if (lt === rt) {
answer++;
break;
}
if (people[lt] + people[rt] <= limit) {
lt++;
rt--;
} else {
lt++;
}
answer++;
}
return answer;
}