본문 바로가기
일반 학습/코딩 테스트

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

by StelthPark 2022. 3. 28.

처리순서

풀이

처음에는 people배열을 받아서 sort로 낮은수부터 높은수까지 정렬 오름차순 정렬을 해서 가장작은값부터 순서대로 넣었는데 가장 작은 값과 가장큰값을 비교해서 넣어줘야 최소한의 구명보트를 조합할 수 있다.

가장 큰값과 가장 작은 값을 더해서 받은 limit보다 작거나 같다면 보트에 실어 보낼 수 있다. 그렇지 않다면 다음값인 70과 가장 작은 값 50을 똑같이 더해본다. 만약 처음부터 둘의 합이 조건에 만족한다면 그안쪽으로 한칸씩 이동시켜 안에 두번째로 가장큰 값과 두번째로 가장 작은값을 비교하게 된다.

 

이 문제는 어떻게 최소한의 구명보트수를 계산할 것인가를 통해 어떻게 비교 덧셈을 할지 잘 파악해야할 것 같다.

 

function solution(people, limit) {
  let answer = 0;

  people.sort((a, b) => b - a);
  console.log(people);
  let lt = 0;
  let rt = people.length - 1;
  while (lt <= rt) {
    if (lt === rt) {
      answer++;
      break;
    }
    if (people[lt] + people[rt] <= limit) {
      lt++;
      rt--;
    } else {
      lt++;
    }
    answer++;
  }

  return answer;
}

댓글