문제
내 풀이
function solution(people, limit) {
var answer = 0;
people.sort((a, b) => b-a);
while(people.length !== 0){
let first = people.shift();
for(let i = people.length - 1; i >= 0; i--){
if (first + people[i] <= limit) {
people.splice(i, 1);
answer += 1;
first = 0;
break;
}
}
if (first !== 0) answer += 1;
}
return answer;
}
가장 무거운 사람과 가장 가벼운 사람이 같이 타는 방법
- 무게를 기준으로 내림차순 정렬
- 다음과 같은 과정을 몸무게 배열이 빌 때까지 반복
- 가장 무거운 사람과 가장 가벼운 사람의 무게 합이 무게 제한 보다 작으면 두 사람이 빠지고 구명보트 개수 추가
- 그렇지 않으면 가장 무거운 사람만 빠지고 구명보트 개수 추가
정확성 검사는 모두 통과했으나 효율성 검사에서 시간초과
다른 풀이
function solution(people, limit) {
var answer = 0;
people.sort((a, b) => b-a);
for(let i = 0, j = people.length - 1; i <= j; i++, answer++){
if (people[i] + people[j] <= limit) j--;
}
return answer;
}
기존 풀이방법과 논리는 같지만, people 배열 가공 없이 인덱스만으로 풀이