안녕 세상아,

[프로그래머스/c++] Lv2 구명보트 본문

프로그래머스

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

돈 많은 백수가 되고싶다 2024. 9. 21. 14:16

https://school.programmers.co.kr/learn/courses/30/lessons/42885

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

투포인터를 이용하여 푼 코드이다.

 

1. left, right 값을 정의한다. left 값은 가장 좌측 값인 0, right 값은 가장 우측 값인 벡터 size()-1 이다.

2. 오름차순으로 정렬해준다. 

3. 값은 가장 작은 값 + 가장 큰 값 해줄 예정

4. 만약 벡터[left] + 벡터[right] 가 주어진 limit보다 작거나 같으면 left ++ 해준다.

5. 그 외의 상황에서는 모두 주어진 limit 보다 큰 경우이기 때문에 people[right]가 혼자 타야되는 경우이다.

6. 그렇기 때문에 answer++ 해준다. 

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int solution(vector<int> people, int limit) {
    int answer = 0;
    int left = 0;
    int right = people.size() - 1;

    sort(people.begin(), people.end());

    while (left <= right) {
        if (people[left] + people[right] <= limit) {
            left++;
        }
        right--;
        answer++;
    }

    return answer;
}