[프로그래머스 Lv2] 구명보트 (JavaScript)

loopydoopy·2023년 4월 27일
0

알고리즘

목록 보기
4/14

문제

코드

function solution(people, limit) {
  let count = 0 
  
  people.sort((a,b) => b-a)
   
  let left = 0;
  let right = people.length - 1
  
  while(left < right+1){
      if(people[left] + people[right] < limit + 1){
          right --
      }
      count++
      left++
  }
  
  return count
}

풀이

처음에는 효율성을 고려하지 못하고 limit - 40 이상인 사람들을 배열에서 제거하고 나머지 배열 요소를 정렬한 후 이중 for문을 통해 조건이 충족하는 경우에 count를 구하는..방식을 통해 해결하려 했다.
people 배열은 최대 50,000명이 담길 수 있는 점을 고려하면 효율성을 최대한 고려하면서 코드를 작성해야한다.
다른 사람들의 코드를 보며 힌트를 얻고 다시 작성해봤다.

  • 구명보트를 최소로 사용하기 위해서는 '무게'를 기준으로 2명을 매칭해야하므로 sort 를 통해 배열 people 정렬
  • 배열의 첫 인덱스는 left, 마지막 요소는 right가 가르킴
  • while문을 통해 left가 right보다 크거나 같아지면 탈출
  • 두 사람의 무게 합이 limit 이하라면 함께 배를 탈 수 있는 경우 right 감소, left가 증가됨 (= 배를 탄 것으로 간주하여 다음 요소 가르킴)
  • while문이 반복되는 동안은 필요한 배가 하나씩 추가되는 점을 고려해야 함(1명이 타든 2명이 타든)




모두 통과!

profile
일단 해보기🐢

0개의 댓글