티스토리 뷰

알고리즘

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

개발기록 :) 2022. 9. 29. 09:36

성공 코드(내 코드)

  1. people을 오름차순으로 정렬한다.
  2. 보트에 최대 2명이 탑승 가능하므로 최솟값 + 최댓값을 더해본다.
    1. 더해준 값이 limit을 넘으면 2명 탑승이 안되므로 맨 뒤의 사람은 혼자 타야한다.
      1. 한명 밖에 타지 못하면 맨 뒷사람을 가리키는 인덱스를 줄여준다.
    2. 더해준 값이 limit을 넘지 않으면 2명 탑승이 가능하다.
      1. 즉 맨 앞사람을 가리키는 인덱스를 하나 증가시키고 맨 뒷사람을 가리키는 인덱스를 하나 감소시킨다.
  3. 이 과정을 맨 앞사람을 가리키는 인덱스가 맨 뒷사람을 가리키는 인덱스보다 작거나 같은 동안 반복해준다.
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

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

 


다른 사람 풀이

  • 벡터의 back()함수와 pop_back() 함수를 이용해서 구할 수 있다.
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

int solution(vector<int> people, int limit) {
    sort(people.begin(), people.end());
    int answer = 0, idx = 0;
    while(people.size() > idx){
        int back = people.back(); people.pop_back();
        if(people[idx] + back <= limit){ answer++; idx++; }
        else answer++;
    }
    return answer;
}