[프로그래머스 / C++] 구명보트

YH·2023년 12월 28일
0

문제

구명보트 : 문제 링크


문제 분석

  • 무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 한다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 50kg]이고 구명보트의 무게 제한이 100kg이라면 2번째 사람과 4번째 사람은 같이 탈 수 있지만 1번째 사람과 3번째 사람의 무게의 합은 150kg이므로 구명보트의 무게 제한을 초과하여 같이 탈 수 없다. 구명보트를 최대한 적게 사용하여 모든 사람을 구출하려고 한다. 사람들의 몸무게를 담은 배열 people과 구명보트의 무게 제한 limit가 매개변수로 주어질 때, 모든 사람을 구출하기 위해 필요한 구명보트 개수의 최솟값을 return 하도록 solution 함수를 완성

  • 제한 사항

  • 무인도에 갇힌 사람은 1명 이상 50,000명 이하이다.
  • 각 사람의 몸무게는 40kg 이상 240kg 이하이다.
  • 구명보트의 무게 제한은 40kg 이상 240kg 이하이다.
  • 구명보트의 무게 제한은 항상 사람들의 몸무게 중 최댓값보다 크게 주어지므로 사람들을 구출할 수 없는 경우는 없다.
  • 배열의 오름차순 정렬을 위해 sort() 함수를 사용할 것 이므로 algorithm 헤더를 포함
  • 구명보트 개수를 저장할 정수형 변수 answer과 while문에 사용할 인덱스 i를 0으로 초기화. sort() 함수를 사용하여 people을 오름차순으로 정렬. while loop의 조건식을 people.size() > i로 설정하여 people의 size가 인덱스 i보다 클경우 반복하고, if문을 사용하여 현재 인덱스의 원소와 people의 가장 마지막 원소를 더한값이 limit 이하라면 answer과 i를 1씩 늘리고, people의 마지막 원소를 제거. 아닌 경우는 2명에서 탈수 있는 경우가 없음을 의미하므로 else문을 사용하여 answer을 1씩 늘리고, people의 마지막 원소를 제거. loop 탈출 후, 최종적으로 저장된 answer을 return

algorithm 헤더의 sort() 함수 사용법
void sort(T start, T end, Compare comp); //comp 인자가 공란이면 오름차순 정렬

  • sort(v.begin(), v.end(), compare); // 사용자 정의 함수 사용
  • sort(v.begin(), v.end(), greater<자료형>()); // 내림차순
  • sort(v.begin(), v.end(), less<자료형>()); // 오름차순

풀이

#include <vector>
#include <algorithm>

using namespace std;

int solution(vector<int> people, int limit) {
    int answer = 0, i = 0;
    
    sort(people.begin(), people.end());
    while(people.size() > i) {
        if(people[i] + people.back() <= limit) {
            answer++;
            i++;
            people.pop_back();
        }
        else {
            answer++;
            people.pop_back();
        }
    }
    return answer;
}
profile
Keep Recycling Your Dreams

0개의 댓글