Programmers - 구명보트

Doodream·2021년 4월 1일
0

코딩테스트

목록 보기
14/22
post-thumbnail

💻 구명보트


❓ 문제

https://programmers.co.kr/learn/courses/30/lessons/42885

✔️ 코드

function solution(people, limit) {
    people.sort(function (a, b) { return a - b });
    for (var i = 0, j = people.length - 1; i < j; j--) {
        if (people[i] + people[j] <= limit) i++;
    }
    return people.length - i;
}

var people = [70, 50, 80, 50];
var limit = 100;

console.log(solution(people, limit));

❗️풀이과정

문제를 접근할때 관찰을 잘해야한다.
보트가 감당가능한 무게를 넘으면 보트는 더이상 사람을 받을수 없다.

즉, 사람들을 내림차순으로 작은 것들이 앞에 오도록 정렬을 시킨후,
총사람 숫자 - 여려명이서 보트를 타는 경우 를 하면 보트가 왔다갔다 하는 횟수가 나온다.

작은 것순으로 정렬시키면 맨앞의 사람과 같이 탈수 있는 몸무게가 가장 큰 사람이 함께 타면 보트 횟수를 + 시킨다.

이상태에서 2번째 사람과 같이 탈수 있는 몸무게가 2번째로 큰사람 이렇게 짝을 묶어 보트 횟수를 + 시키고 이 횟루를 총사람 숫자에서 빼면 (중복되기 때문)

보트가 왔다갔다 하는 횟수를 알수 있다.

배운점

사람수가 최대 50000명이라고 했을때 이를 이중 반복문으로 돌리면 25억이다.
반복 횟수가 너무 많으므로 시간초과가 될 확률이 높다.

profile
일상을 기록하는 삶을 사는 개발자 ✒️ #front_end 💻

0개의 댓글