https://programmers.co.kr/learn/courses/30/lessons/42885
풀이법
1) Greedy 방식을 사용해서 해결하는 문제였다.
2) 사람들의 무게인 people 배열을 오름차순으로 정렬 후, 가장 몸무게가 많이 나가는 사람 부터 보트에 태웠다. 이후 몸무게가 다음으로 많이 나가는 사람이 보트에 들어갈 수 있으면 반복하며 태워주었고, 불 가능할 경우 가장 가벼운 사람, 그 다음으로 가벼운 사람을 넣는 방식의 이분 탐색적인 방식을 활용하여 문제를 해결할 수 있었다.
3) Greedy 접근법이라는 것을 알고 풀었기에 더 쉽게 풀 수 있었던 문제라고 생각한다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool compare(int a, int b)
{
return a>b;
}
int solution(vector<int> people, int limit) {
int answer = 0;
sort(people.begin(),people.end());//작은 순 정렬
int start=0;
int end=people.size()-1;
while(start<=end)
{
int nowW=people[end];
end--;//하나 줄이기;
while(nowW+people[end]<=limit)
{
nowW+=people[end];
end--;
}
while(nowW+people[start]<=limit)
{
nowW+=people[start];
start++;
}
answer++;
}
return answer;
}
'Coding_Test_C++' 카테고리의 다른 글
BaekJoon 3190번: 뱀(C++) (0) | 2021.09.06 |
---|---|
BaekJoon 2473번: 세 용액(C++) (0) | 2021.09.04 |
BaekJoon 18352번: 특정 거리의 도시 찾기(C++) (0) | 2021.08.30 |
Programmers Level 2: 괄호 변환(C++) (0) | 2021.08.25 |
Programmers: 완전탐색 > 소수 찾기(C++) (0) | 2021.08.22 |