문제 출처: https://programmers.co.kr/learn/courses/30/lessons/42885
해당 문제는 그리디(Greedy) 알고리즘으로 항상 최적의 선택(optimal solution)을 해야하는 문제입니다. 해당 문제를 풀기 위해서 저는 sort를 이용하였습니다. 무인도에 갇힌 사람들의 몸무게로 정렬을 한후 left와 right를 보는 커서를 두개 두어 같이 탈 수 있거나, 몸무게가 무거운 사람만 탈 수 있는 경우로 나뉩니다.
코드는 다음과 같습니다:)
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> people, int limit) {
int answer = 0, left, right ;
sort(people.begin(), people.end()) ;
for(left = 0, right = people.size()-1 ; left < right ; right--){
if(people[left] + people[right] <= limit)
left++ ;
answer += 1 ;
}
if(left == right)
answer += 1 ;
return answer;
}
문제없이 해결할 수 있었습니다.
해당 문제는 Github에서도 보실 수 있습니다.
https://github.com/gurcks8989/CodingTest/blob/master/Programmers/P42885_Lifeboat.cpp
훈수 및 조언은 언제나 환영입니다.