프로그래머스/Level_2

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

배발자 2022. 5. 14.

목차

    반응형

    이 문제는 그리디를 활용해서 풀면 되는 문제므로 어떻게 문제에 접근해야할지 잠깐 고민할 시간이 필요하다. 

    해당 문제에서 구명보트에는 단 두사람만 탈수 있다는 것에 중점을 두고 풀어야한다. 

     

    아무리 몸무게가 낮다고 해도 탈 수 있는 사람은 단 두명! 

     

    그렇기 때문에 가장 적절하게 사람들을 태우기 위해서는 

    "제일 무거운사람 한명""제일 가벼운사람 한명"을 태워야한다. 

     

    왜냐하면 무거운 애들 두명을 태울려고 해도 limit을 넘길 경우가 무조건 있을 것이다. 

    그렇기 때문에 최대한 가벼운애 한명 + 무거운애 한명을 태우는게 이 문제에서 요구하는 조건인것이다. 

     

    #접근방법 

    1. 무게를 담고 있는 벡터 오름차순으로 정렬 

    2. 투포인터를 활용하기 위해 시작 포인터 s와 끝 포인터 e를 생성한다. 

    3. s가 가리키는 원소와 e가 가리키는 원소의 합이 limit을 넘지 않으면 result값을 1 증가시킨다. (* s,e 포인터 위치 변경)

    4. 만약 s가 가리키는 원소와 e가 가리키는 원소의 합이 limit을 넘으면 두명을 못 태우기 때문에 무거운 친구 혼자 태워서 보낸다. 이때도 result값을 1 증가시킨다. 

    5. 반복문은 s가 e보다 같거나 작을때 동안 수행하며 만약 s가 e 와 같아진다면 남은사람이 한명이기 때문에 혼자 태워보내고 result 값을 1 증가시키고 반복문을 종료한다. 

     

    
      
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <iostream>
    using namespace std;
    int solution(vector<int> people, int limit) {
    int result =0;
    int s = 0;
    int e = people.size()-1;
    sort(people.begin(), people.end());
    while(s<=e){
    if(s==e){
    result++;
    break;
    }
    else if(people[s]+people[e]<=limit){
    result++;
    s++;
    e--;
    }
    else{
    e--;
    result++;
    }
    }
    return result;
    }

     

     

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

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

    programmers.co.kr

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

    반응형

    댓글