Lv 2. 구명 보트

박하린·2021년 6월 20일
0

프로그래머스

목록 보기
32/42

📚 문제

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

💡 접근

  1. 내림차순으로 정렬해서 무게가 많이 나가는 사람부터 태운다.
  2. 최대 두명까지만 탈 수 있으니 가장 무거운 사람 + 가장 가벼운 사람 더했을 때 limit보다 작거나 같으면 두 명이 탈 수 있는 경우이다.
  3. 2번 연산을 하면 최소 횟수를 구할 수 있다.

⌨️ 코드

function solution(people, limit) {
  people.sort((a, b) => b - a);
  let max = 0;
  let min = people.length - 1;
  let cnt = 0;

  // max 인덱스가 min 보다 커지면 사람이 다 보트에 탔다는 것이므로 종료조건은 다음과 같다.
  while (max < min) {
    if (people[max] + people[min] <= limit) {
      // max가 보트에 타고, 그 다음 가장 무거운 사람으로 넘어간다.
      max++; 
      // min이 보트에 함께 타고, 그 다음 가장 가벼운 사람으로 넘어간다.
      min--;
      // else인 경우는 더했을 때 limit보다 큰 것이므로 max 한 명만 보트에 탈 수 있다. 
    } else max++; 
    cnt++;
  }

  // ex ) [80,70,60,50,10,10], 100 
  // 이 경우에 while문을 나왔을 때 max = 3, min = 3이 되지만 
  // 몸무게 min은 아직 보트에 타지 못했으므로 cnt ++ 해서 보트에 마지막에 태워준다.
  if (max == min) cnt++;
  return cnt;
}
profile
깃허브: https://github.com/khakaa

0개의 댓글

관련 채용 정보