해당 문제는 Greedy알고리즘을 활용한 것이다.
처음에는 people 자체를 splice 메서드를 활용하여 문제를 해결하려 했다
하지만, splice 메서드가 시간초과라는 오류를 가져와 이는 올바른 답안으로 인정되지 않았다
function solution(people, limit) {
var answer = 0;
people = people.sort((a,b)=> a-b)
while(people.length != 0){
answer++;
const boat = people[0];
for(let j = people.length-1; j > 0 ; j--){
if(boat + people[j] <= limit){
people.splice(j,1);
break;
}
}
people.shift();
}
return answer + people.length;
}
다른 답안을 생각하다
배열을 조작하는 대신 배열 값을 가져오는 방법을 index로 하여 문제를 해결하였다.
단순히 answer의 값만 필요하기에 배열을 굳이 바꿀 필요는 없었다
최종 코드는 다음과 같다👇
function solution(people, limit) {
let answer = 0;
let [front, end] = [0, people.length-1];
// 오름차순으로 정리
people.sort((a,b)=> a-b);
// 시작과 끝이 엇갈리면 종료
while(front <= end){
if(people[front] + people[end] <= limit){
front +=1;
end -=1;
} else {
end -= 1;
}
answer +=1;
}
return answer;
}