구명보트

김현민·2021년 10월 11일
0

Algorithm

목록 보기
101/126
post-thumbnail

코드

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

  people.sort((a, b) => b - a)
  console.log("people: ", people)

  for (let i = 0, j = people.length - 1; i <= j; i++, answer++) {
    if (people[i] + people[j] <= limit) j--
  }

  console.log(answer)
  return answer
}
// solution([70, 50, 80, 50], 100)
// solution([70, 80, 50], 100)

solution([70, 80, 40, 43, 45, 50, 50, 96], 100)

풀이

  1. 내림차순 정렬
  2. 가장 무거운 무게 + 가장 가벼운 무게로 비교
  3. 맨 앞이 가장 무거운 무게이므로 두 무게의 합이 limit보다 크면 가장 무거운 무게를 지나간다(버린다) 동시에 boat갯수 추가
  4. 합이 limit 이하라면 무거운무게는 가벼운쪽으로, 가벼운무게는 무거운쪽으로 이동해 합을 구하면서 boat수를 증가시킨다.

생각했던 것

queue을 생각해서 무게를 queue에 넣고, limit이상이 되면 dequeue하려고 했다.
하지만 몇번째까지 dequeue해야 하는지 설정하는데에서 어려움을 겪었다.

그리고 가장 가벼운무게 + 가장 무거운 무게가 가장 많이 탈 수 있는 방법이라는 것을 생각해내지 못했다.

profile
Jr. FE Dev

0개의 댓글