구명보트 - 프로그래머스

 

프로그래머스

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

programmers.co.kr

풀이 방법

처음에 조건 중 보트에 최대 2명씩 밖에 탈 수 없다는 부분을 제대로 안 읽고 풀어서 너무 복잡하게 생각하고 있었다.

 

1. people을 정렬한다.

2. 사람의 최소 몸무게가 40kg이니 people[i] + 40이 무게 제한보다 크거나 people[i]와 배열의 끝에 있는 사람의 무게의 합이 무게 제한보다 크면 people[i]만 나갈 수 있으므로 answer++만 해준다.

3. 위의 조건에 만족하지 않는 다면 2명 다 나갈 수 있으므로 뒷 사람을 없애주기 위해 pop_back()을 하고 answer++한다.

4. 반복문이 끝난 후 answer 리턴

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

using namespace std;

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

'프로그래머스 > 2레벨' 카테고리의 다른 글

예상 대진표/C++  (0) 2023.01.10
N개의 최소공배수/C++  (0) 2023.01.10
영어 끝말잇기/C++  (0) 2023.01.10
카펫/C++  (0) 2023.01.06
짝지어 제거하기/C++  (0) 2023.01.06

+ Recent posts