[JS] 구명 보트
FrontEnd/프로그래머스

[JS] 구명 보트

728x90

처음에 문제를 잘못 읽어서 푸는데 애먹었던 문제였다.

 

 

 

최소한의 구명보트를 찾는데 어떻게 그리디로 해결할 수 있지? 끙끙대면서 문제를 읽어보니 구명보트에서는 최대 2명씩만 탈 수 있다는 조건이 붙어있는 문제였다.

 

아..

 

 

 

우선 배열을 정렬하고,

 

 

즉, 가장 무거운사람과 가장 가벼운 사람을 비교해서 탈 수 있다면 둘을 태워보내고, 그렇지 않으면 무거운사람만 보내는 식으로 문제를 해결하면 된다!

 

 

이때 가장 가벼운 사람을 shift를 사용해서 꺼내면 시간복잡도가 늘어나니 인덱스를 활용해서 해결했다.

 

 

 

function solution(people, limit) {
  people.sort((a, b) => a - b);
  let ret = 0;
  let i = 0
    
  while (people.length-i > 0) {
    let p = people.pop();
    while (p < limit && people.length-i > 0) {
      if (p + people[people.length - 1] <= limit) {
        p += people.pop();
      } else if (p + people[i] <= limit) {
        p += people[i++]
      } else break;
    }
    ret++;
  }

  return ret;
}
728x90

'FrontEnd > 프로그래머스' 카테고리의 다른 글

[JS] 조이스틱  (0) 2023.06.30
[JS] 큰 수 만들기  (0) 2023.06.29
[JS] 오픈채팅방  (0) 2023.06.28
[JS] 후보키  (0) 2023.06.27
[JS] 타겟 넘버  (0) 2023.06.27