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

Kyle·2020년 12월 11일
0

problem solving

목록 보기
6/36

문제: 구명보트

최대 2명만 탈 수 있는 구명보트가 최소 몇개 필요한지 구하는 문제
구명보트의 limit무게와 사람들의 무게가 주어진다.

문제: https://programmers.co.kr/learn/courses/30/lessons/42885#

해결방법

가장 무거운 사람과 가장 가벼운 사람이 함께 탈 때 구명보트가 최소로 필요하다.

  1. 배열을 정렬
  2. 맨앞 인덱스와 맨 뒤의 인덱스를 비교한다. (lt, rt라고 하겠다.)
  3. lt,rt에 있는 값을 비교해 합이 limit보다 작으면, rt를 한칸 앞으로 -1 해준다. lt를 한칸 뒤로 +1해준다.
  4. 합이 limit보다 작지 않다면, lt만 +1해준다.

처음에는 lt,rt로 인덱스를 저장한 것이 아닌 pop(), shift() 했는데 효율성에서 시간초과가 났다.
그래서 인덱스 값으로 접근하니 해결됐다.

코드

function solution(people, limit) {
  let answer = 0;
  people.sort((a, b) => b - a);
  let lt = 0;
  let rt = people.length - 1;
  while (lt <= rt) {
    if (people[lt] + people[rt] <= limit) {
      rt--;
    }
    answer++;
    lt++;
  }
  return answer;
}
profile
Kyle 발전기

0개의 댓글