2023. 11. 14. 03:21, 알고리즘/프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/42885
#include <bits/stdc++.h>
using namespace std;
int solution(vector<int> people, int limit) {
int answer = 0;
sort(people.begin(),people.end(),greater<int>());
int st=0;
int en=people.size()-1;
while(st<en){
if(people[st]+people[en]>limit){
answer++;
st++;
}
else {
answer++;
st++;
en--;
}
}
if(st==en) answer++;
return answer;
}
그리디와 투포인터를 엮은 형태로 작성하였다.
이때에 people이 짝수개이고, 양쪽의 포인터가 서로 만나지 못하는 경우가 있고,
people가 홀수개이고, 양쪽의 포인터가 서로 만나는 경우가 있어서
홀수개이고 양쪽의 포인터가 만나는 경우는 while(st<en) 내부에서 처리해주지 못하므로
if(st==en) answer++; 에서 처리해주는 형태로 작성하였다.
다른 방법으로도 구현할 수 있겠으나, 다른 사람의 풀이를 보더라도 전반적으로 대부분 투포인터를 이용한 형태로 보여진다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 lv 3. 42884 단속카메라 c++ **다시 풀어볼것** (0) | 2023.11.16 |
---|---|
프로그래머스 lv 3. 42861 섬 연결하기 c++ (0) | 2023.11.15 |
프로그래머스 lv 2. 42883 큰 수 만들기 c++ **다시 풀어보기** (0) | 2023.11.14 |
프로그래머스 lv 2. 42860 조이스틱 c++ (0) | 2023.11.13 |
프로그래머스 lv 2. 84512 모음사전 c++ (0) | 2023.11.09 |
Comments, Trackbacks