[Programmers] 구명보트

bin1225·2022년 12월 19일
0

Algorithm

목록 보기
6/38

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

using namespace std;

int solution(vector<int> people, int limit) {
    int answer = 0;

    sort(people.begin(), people.end());
    int i = 0, j = people.size()-1;
    while(i<=j){
        if(people[i]+people[j]<=limit){
            i++;
            j--;
            answer++;
        }else{
            j--;
            answer++;
        }
    }
    
    return answer;
}

한 번에 두명이 탈 수 있다는 조건을 놓쳐서 쓸데없이 고민을 좀 더 했다.
한 번에 두명이 최대일 경우, 최선의 선택은 가장 큰 값과 가장 작은 값을 같이 태울 수 있는 경우 그렇게 하는 것이다.
정렬된 상태에서 앞에 있는 사람과 뒤에 있는 사람들 같이 태울 수 없는 경우, 모든 경우에서 뒤에 있는 사람과 같이 탈 수 없다 -> 혼자 타기
다른 사람 풀이를 보니까 for문으로 엄청 깔끔하게 짜신 분이 있었다.

3개의 댓글

comment-user-thumbnail
2022년 12월 19일

놀랍게도 이 문제는 나 일병이고 규빈이 너가 전역 한달 반? 남은 병장일때 내가 너한테 풀라고 했던 문제 ㅎㅎㅎ 리트코드에 Boats to save people 문제인데 그때도 잘 풀었어!

1개의 답글