Game Develop

[Algorithm] Programmers :: 구명보트 본문

Algorithm/Programmers

[Algorithm] Programmers :: 구명보트

MaxLevel 2022. 5. 27. 05:16

https://programmers.co.kr/learn/courses/30/lessons/42885?language=cpp 

 

코딩테스트 연습 - 구명보트

무인도에 갇힌 사람들을 구명보트를 이용하여 구출하려고 합니다. 구명보트는 작아서 한 번에 최대 2명씩 밖에 탈 수 없고, 무게 제한도 있습니다. 예를 들어, 사람들의 몸무게가 [70kg, 50kg, 80kg, 5

programmers.co.kr

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
int solution(vector<int> people, int limit) {
 
    int answer = 0;
    int start = 0;
    int end = people.size() - 1;
 
    sort(people.begin(), people.end());
 
    while (start <= end)
    {
        if (people[start] + people[end] <= limit) // 제한이하면
        {
            answer++;
            start++;
            end--;
        }
        else // 제한넘으면 end줄이면서 체크.
        {
            answer++;
            end--;
        }
    }
 
    return answer;
}
cs

 

이 문제에는 투포인터 알고리즘을 이용했다. 투포인터알고리즘은 1차원배열에서 두개의 포인터를 이용하여 원하는 결과를 얻는 알고리즘이다. 나같은 경우 이 문제를 풀기전까지는 모르던 알고리즘이였다.(이름정도만 들어봤었다)

모르는 상태에서 일단 풀기위해 생각했을 때는, 오름차순으로 정렬시킨다음 처음과 끝을 비교하면서 하는식으로 생각했다. (얼추 비슷하게 생각하긴했다)

여기까지 생각하니까 갑자기 투포인터 알고리즘이라는 키워드가 떠올라서 구글링해서 적당히 공부하고 문제를 풀었다. 하고나니까, 문제가 그냥 투포인터알고리즘의 기본예제같이 느껴졌다. 좋은 문제인것 같다.