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