728x90
문제
https://programmers.co.kr/learn/courses/30/lessons/42885?language=javascript
코드
function solution(people, limit) {
let boat = 0;
let left = 0; //무게 배열에서 제일 큰 무게
let right = people.length - 1; //무게 배열에서 제일 작은 무게
people.sort((a,b)=>(b-a)); //무게 순으로 내림차순하고
while (left < right) {
if (people[left] + people[right] > limit) left++; //제일 큰 무게 + 제일 작은 무게 > limit 이면 두 명이 같이 보트에 못 탄다는 의미니까 다음 진행을 위해 left++시키고 boat++ 해주기
else { //limit보다 같거나 작으면 같이 보트에 탈 수 있는 거니까 다음 진행을 위해 left++, right-- 진행 해주고 boat++ 해주기
left++;
right--;
}
boat++;
}
if (left == right) boat++; //마지막으로 남아있는 사람이 있다면 마지막으로 그 사람을 태우기 위한 boat++ 해주기
return boat;
}
후기
- 문제 이해 : 한 구명보트에는 최대 2명이 탈 수 있고, limit을 넘으면 안 된다. (limit까지는 가능) 모든 사람을 다 태우기 위해 필요한 최소한의 구명 보트 개수를 return 하라
- 다른 분의 풀이를 조금 참고했는데, 그리디 문제인데 마치 퀵 정렬처럼 left, right를 조절하여 중간으로 만나게 하는 방식이 인상적이었고 그리디 문제를 풀이할 때 이런 방법으로도 풀이할 수 있구나를 배웠다!
'알고리즘 > Programmers' 카테고리의 다른 글
[Programmers] H-Index / JavaScript (0) | 2022.01.26 |
---|---|
[Programmers] 프린터 / JavaScript (0) | 2022.01.25 |
[Programmers] 최솟값 만들기 / JavaScript (0) | 2022.01.20 |
[Programmers] 문자열 다루기 기본 / JavaScript (0) | 2022.01.20 |
[Programmers] 제일 작은 수 제거하기 / JavaScript (0) | 2022.01.20 |