Posts [알고리즘] 프로그래머스 - 구명보트
Post
Cancel

[알고리즘] 프로그래머스 - 구명보트


문제

구명보트


접근

이 문제에서 가장 중요한 것은 최대 탑승인원이 2명이라는 것이다.
가장 무거운 사람을 태우고, 남은 한자리에 태울 수 있는 사람이 있다면 누굴 태우든 상관이 없어진다.
최대 무게에 딱 맞출 필요가 없다는 것이다.
2명을 태우는 것에만 집중하면 된다.
역순으로 정렬하고 가장 무거운 사람을 태우고, 가장 가벼운 사람을 태울 수 있다면 함께 태우고, 불가능하면 혼자타면 된다.
예를 들어 [50, 40, 20, 10] 이 있다면, 50과 함께 태울 사람을 고르는데 시간을 쓰지말고, 가장 뒤에 있는 10만 검사해준다.


코드

  • 파이썬 코드
1
2
3
4
5
6
7
8
def solution(people, limit):
    answer = 0
    people.sort(reverse = True)
    for p in people:
        if p+people[-1] <= limit:
            people.pop(-1)
        answer +=1
    return answer
  • C++ 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <vector>
#include <algorithm>
using namespace std;

int solution(vector<int> people, int limit) {
    int answer = 0;
    int size = people.size();
    int i = 0;
    sort(people.begin(), people.end(), greater());    
    while(size > i){
        if(people[i] + people[size-1] <= limit){
            size--;
        }
        i++;
        answer++;
    }
    return answer;
}


This post is licensed under CC BY 4.0 by the author.

[알고리즘] 프로그래머스 - H-Index

[알고리즘] 프로그래머스 - 숫자의 표현