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

dongwon·2021년 5월 2일
0

문제

구명 보트 https://programmers.co.kr/learn/courses/30/lessons/42885

해결

  1. 직관적으로 2명만 탈 수 있다고 할 때, 가장 효율적인 방법은 제일 무거운 사람과 가벼운 사람이 같은 보트를 타는 경우입니다.
    이 두 사람의 무게의 합이 limit 보다 작거나 같을 경우 정답 +1 해주고, 배열에서 제외시켜 줍니다.
  2. 효율성 문제
    배열에서 제외 시킬때, 가장 앞 사람은 shift() 뒷 사람은 pop()으로 빼줬는데 효율성 문제가 걸리므로 index를 통해 접근했습니다.
    혹은 첫 사람의 무게가 limit의 절반인 경우 나머지는 계산할 필요 없이 남은 인원 /2 를 합니다.

코드

[6, 10];
sort((a, b) => b + a - (a + b)); //"106" - "610" 합쳐진 문자열의 대수 비교를 통해 기존의 문자열 비교

코드

function solution(people, limit) {
  let answer = 0;
  people.sort((a, b) => b - a);

  let left = 0;
  let right = people.length - 1;

  while (left <= right) {
    answer++;
    const maxWeight = people[left];
    const minWeight = people[right];

    if (maxWeight + minWeight <= limit) {
      left++;
      right--;
    } else {
      left++;
    }
  }

  return answer;
}
profile
데이원컴퍼니 프론트엔드 개발자입니다.

0개의 댓글