🚩 문제 주소
📄 접근 방법
투 포인터
더보기
핵심: 가장 무거운 사람과 가장 가벼운 사람을 묶어서 판단하는게 제일 최소 결과가 나옵니다.
1. 주어진 사람들 배열을 오름차순으로 정렬합니다.
2. left 포인터는 0, right 포인터는 배열의 길이 - 1 으로 할당합니다.
3. left포인터가 right포인터가 같지 않을 때만 아래의 과정을 반복합니다.
- 정렬배열[left](가장 가벼운 사람) + 정렬배열[right](가장 무거운 사람)이 주어진 limit보다 작다면,
보트에 두명 다 탈 수 있다는 것이므로 left포인터는 1 늘려주고 right포인터는 1 낮춰줍니다. - limit보다 크다면 한명만 탈 수 있으므로 무거운 사람을 보내야 합니다.
따라서 right포인터만 1 낮춰줍니다. - 판별이 끝났다면, 어차피 보트는 2명이든 1명이든 무조건 태우고 가니까 answer를 1 늘려줍니다.
4. answer를 반환합니다.
👨💻 나의 코드
function solution(people, limit) {
const sortPeople = people.sort((a,b)=>a-b);
let answer = 0;
let left = 0, right = people.length-1;
while (left <= right) {
if (sortPeople[left] + sortPeople[right] <= limit) {
left++;
right--;
} else {
right--;
}
answer++;
}
return answer;
}
'Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스 / JS] 올바른 괄호 - Level 2 (0) | 2023.04.04 |
---|---|
[프로그래머스 / JS] 추억 점수 - Level 1 (0) | 2023.04.02 |
[프로그래머스 / Python, JS] 키패드 누르기 - Level 1 (0) | 2023.03.22 |
[프로그래머스 / Python] 숫자 문자열과 영단어 - Level 1 (0) | 2023.03.22 |
[프로그래머스 / Python] 다트 게임 - Level 1 (0) | 2023.03.22 |