프로그래머스 lv 2. 42885 구명보트 c++

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

#include <bits/stdc++.h>

using namespace std;

int solution(vector<int> people, int limit) {
    int answer = 0;
    sort(people.begin(),people.end(),greater<int>());
    int st=0;
    int en=people.size()-1;
    while(st<en){
        if(people[st]+people[en]>limit){
            answer++;
            st++;
        }
        else {
            answer++;
            st++;
            en--;
        }
    }
    if(st==en) answer++;
    
    return answer;
}

그리디와 투포인터를 엮은 형태로 작성하였다. 

이때에 people이 짝수개이고, 양쪽의 포인터가 서로 만나지 못하는 경우가 있고, 

people가 홀수개이고, 양쪽의 포인터가 서로 만나는 경우가 있어서

홀수개이고 양쪽의 포인터가 만나는 경우는 while(st<en) 내부에서 처리해주지 못하므로 

if(st==en) answer++; 에서 처리해주는 형태로 작성하였다. 

 

다른 방법으로도 구현할 수 있겠으나, 다른 사람의 풀이를 보더라도 전반적으로 대부분 투포인터를 이용한 형태로 보여진다. 

 

  Comments,     Trackbacks