function solution(people, limit) {
people = people.sort()
let result = 0
let [s, e] = [0, people.length - 1]
while (s <= e) {
let curr = people[s] + people[e]
if (curr <= limit) s += 1
e -= 1
result += 1
}
return result
}
로직은 아무리 봐도 오류가 없었습니다. 테스트 케이스를 6개가까이 추가해보았지만 오류가 나올만한 부분이 전혀 없었는데 미처 간과했던 부분이 하나 있었습니다. sort()는 정렬 시 디폴트로 유니코드 값을 기준으로 정렬하기 때문에 일반적으로 오름차순이나 내림차순으로 원하는 결괏값 배열을 기대할 수 없습니다.
작성 코드 (2차 시도 / 통과)
function solution(people, limit) {
people = people.sort((a, b) => a - b)
let result = 0
let [s, e] = [0, people.length - 1]
while (s <= e) {
let curr = people[s] + people[e]
if (curr <= limit) s += 1
e -= 1
result += 1
}
return result
}
sort의 콜백 자리에 비교 함수를 넣어 올바르게 정렬되도록 변경했습니다. 허무했네요.
구현 로직 (투포인터 사용)
1. people을 오름차순 정렬합니다.
2. 투포인터를 만들어줍니다. 시작값은 0, 마지막값은 people의 길이입니다.
3. 가장 큰 값과 작은 값을 더합니다. 이 값이 limit보다 크다면 큰 사람이 혼자서 배를 타고 가야하므로 e를 왼쪽으로 1칸 옮겨주고 limit보다 같거나 작다면 작은 사람과 무거운 사람을 같이 보내야 하므로 s와 e를 각각 1칸씩 옮겨줍니다.