티스토리 뷰
성공 코드(내 코드)
- people을 오름차순으로 정렬한다.
- 보트에 최대 2명이 탑승 가능하므로 최솟값 + 최댓값을 더해본다.
- 더해준 값이 limit을 넘으면 2명 탑승이 안되므로 맨 뒤의 사람은 혼자 타야한다.
- 한명 밖에 타지 못하면 맨 뒷사람을 가리키는 인덱스를 줄여준다.
- 더해준 값이 limit을 넘지 않으면 2명 탑승이 가능하다.
- 즉 맨 앞사람을 가리키는 인덱스를 하나 증가시키고 맨 뒷사람을 가리키는 인덱스를 하나 감소시킨다.
- 더해준 값이 limit을 넘으면 2명 탑승이 안되므로 맨 뒤의 사람은 혼자 타야한다.
- 이 과정을 맨 앞사람을 가리키는 인덱스가 맨 뒷사람을 가리키는 인덱스보다 작거나 같은 동안 반복해준다.
#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;
}
'알고리즘' 카테고리의 다른 글
[백준 14247번/c++] 나무자르기 (0) | 2022.11.15 |
---|---|
[백준 2138번/c++] 전구와 스위치 (0) | 2022.11.09 |
[프로그래머스/c++] 성격 유형 검사하기 (0) | 2022.08.26 |
[프로그래머스/c++] 같은 숫자는 싫어 (0) | 2022.08.26 |
[프로그래머스/c++] 신규 아이디 추천 (0) | 2022.08.24 |