1번 : 문제를 보고 처음 들었떤 생각은 가장 큰 친구와 가장 작은 친구의 합이
limit보다 작거나 같다면 최소비용으로 구조할수 있다고 생각했다.
-> 일단 sort 시키자.
한번 생각할 점이... 만약에 20,40,40,60,80 이 있다면
limit은 가장 큰 친구보다 무조건 값이 크다고 하니까 최소값이 80을 limit으로 두면...
20 + 80 = 100 > 80 이므로 이와 같은 상황에서는 한 명만 구조 가능한데,
어떤 친구를 먼저 빼줄까에 대한 생각을 햇다.
20인 친구를 구조할까? 80인 사람을 구조할까?
3번 : 문제의 예제에서는 70,50,50,80 인 사람에서 + limit : 100
(50,50), (70), (80) 이렇게 구성하면 최고의 효율을 나타낸다고 하므로.
50 + 80 = 130 > 100 이다. 여기서 50인 친구를 구조할까? 80인 친구를
구조할까?인데 문제에서 최적은 (50 , 50), (70), (80)
이를 통해 알 수 있는 점은 가장 몸무게가 큰 친구를 빼야 한다는 것을
캐치해야한다
수도식
그렇다면 조건 식은
if(가장 큰 친구 + 가장 작은 친구 <= limit)
{
}
else
{
가장 큰 친구를 빼야 한다는 것이다.
}
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> people, int limit) {
int answer = 0;
sort(people.begin(), people.end());
int bigIndex = people.size() - 1;
int smallIndex = 0;
while(smallIndex <= bigIndex)
{
//두명의 사람 같이 구조,
if(people[bigIndex] + people[smallIndex] <= limit)
{
bigIndex--;
smallIndex++;
}
//한명의 사람만 구조.
else
{
bigIndex--;
}
answer++;
}
return answer;
}