728x90

문제


https://programmers.co.kr/learn/courses/30/lessons/42885?language=javascript 

 

코딩테스트 연습 - 구명보트

무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5

programmers.co.kr

 

코드


function solution(people, limit) {
    let boat = 0;
    let left = 0; //무게 배열에서 제일 큰 무게
    let right = people.length - 1; //무게 배열에서 제일 작은 무게

    people.sort((a,b)=>(b-a)); //무게 순으로 내림차순하고
    while (left < right) {
        if (people[left] + people[right] > limit) left++; //제일 큰 무게 + 제일 작은 무게 > limit 이면 두 명이 같이 보트에 못 탄다는 의미니까 다음 진행을 위해 left++시키고 boat++ 해주기
        else { //limit보다 같거나 작으면 같이 보트에 탈 수 있는 거니까 다음 진행을 위해 left++, right-- 진행 해주고 boat++ 해주기
            left++;
            right--;
        }
        boat++;
    }
    if (left == right) boat++; //마지막으로 남아있는 사람이 있다면 마지막으로 그 사람을 태우기 위한 boat++ 해주기
    return boat;
}

 

후기


  • 문제 이해 : 한 구명보트에는 최대 2명이 탈 수 있고, limit을 넘으면 안 된다. (limit까지는 가능) 모든 사람을 다 태우기 위해 필요한 최소한의 구명 보트 개수를 return 하라
  • 다른 분의 풀이를 조금 참고했는데, 그리디 문제인데 마치 퀵 정렬처럼 left, right를 조절하여 중간으로 만나게 하는 방식이 인상적이었고 그리디 문제를 풀이할 때 이런 방법으로도 풀이할 수 있구나를 배웠다!

+ Recent posts