function solution(people, limit) {
people.sort((a, b) => a - b)
let answer = 0
while(people.length > 0) {
if(people[people.length - 1] + people[0] > limit) {
people.pop()
answer += 1
} else {
people.pop()
people.shift()
answer += 1
}
}
return answer
}
하지만 위와 같이 작성하고 제출하면, 효율성 테스트 케이스 1번이 불합격 처리 된다.
두 명을 같이 태우는 경우의 shift연산 때문이다. 사람들 목록을 O(N)만큼을 반복하게 되어 시간 초과가 발생하였다.
따라서 아래와 같이 인덱스로 접근하는 방식으로 수정하여 해결하였다.
function solution(people, limit) {
people.sort((a, b) => a - b)
let answer = 0
let left = 0 // 왼쪽 인덱스
let right = people.length - 1 // 오른쪽 인덱스
while((right - left) >= 0) {
if(people[right] + people[left] > limit) {
right -= 1
answer += 1
} else {
right -= 1
left += 1
answer += 1
}
}
return answer
}