본문 바로가기
🖋️PS

좌표정렬하기 11650 c++(pair, vector, 정렬)

by 덩크냥 2022. 12. 23.

4개월만에 재도전한 문제!

그간 공부하면서 c++에 정말 다양한 STL이 있다는걸 알게되었다. 이 언어의 장점인만큼 많이 접해보고자 하였는데 예전에 못푼문제의 유형이 두가지의 정보가 연관이 있다는점. 그러한 점에서 pair이라는 STL을 써보고자 하였다.

  1. pair STL

#include <vector>

#include <algorithm> 두군데에 동시에 포함되어있다고 한다.

실상은 #include <utility>가 본래의 라이브러리이지만 범용성이 좋아 같이사용되는거같다.

pair<int,int> p; 이런식으로 쓰는거같다. <> 안에는 type을 써주고 그 우측에 변수명 (배열로도 가능).

그러나 동적배열로 pair을 사용해야 이번문제를 풀 수 있음을 예감했다. 찾아도 나오지않아 더 자세히 보니

vector와 혼용해서 쓰더라!.

vector<<int, int>> p;

이런식으로 쓰면 어떻게 push를 하냐?

기존 vector는 push_back을 이용했었다.

1) emplace_back( a , b );이렇게 두가지를 한번에 푸시!

2)push_back(make_pair(a,b)); 요러케

3)push_back({a,b}); 요러케도!!

4) 혹은,, 잘 안쓰일거같지만 push_back(pair<int, int>(a, b)); 이런식으로라도 사용은가능하다!

1, 3 둘중에 하나를 애용하겠다!

2. 정렬!

값이 두개가 같이있다. first와 second로!? 그럼 정렬을 할땐 어떤것이 기준이 된걸까??

우선 벡터안에있기에 단순 algorithm라이브러리를 이용한 sort(begin(),end()); 로 하면 first값 기준으로 정렬이 오름차순으로 된다. 만약 first값이 같은것들이 있다면?? second 값이 오름차순이 되도록 정렬된다.

이번 문제는 단순해서 위의 방법대로 한번에 끝나버린다!

만약에 x좌표는 오름차순 , y좌표는 내림차순이길 요구한다면????????????

-> 직접 함수를 만들어서 쓰자.

bool compare (const pair<int,int>&a, const pair<int,int>&b>{

if(a.first == b.first){

return a.second > b.second; // (두번째 수로 내림차순)

}

else return a.first < b.first;

}

물론 두번째 수로도 오름차순을 할거면 이런거없이 그냥 sort하면됨

위에처럼 함수를 만들었다면 sort(v.begin(), v.end() , compare ); 요러케! compare은 함수이름인것이다.

만약만약에 내림차순으로 하고싶으면?? 둘째꺼도 내림차순?? 그럼그냥 sort(v.rbegin(), rend()); r만 붙이면 되는것이다. 근데 의아한점이 compare 함수 만들고 옆에 쓰면 r 붙이든말든 오름차순으로 나오네? 나중에 안귀찮을때 다시 봐야겠다===============정리 끝