

4개월만에 재도전한 문제!
그간 공부하면서 c++에 정말 다양한 STL이 있다는걸 알게되었다. 이 언어의 장점인만큼 많이 접해보고자 하였는데 예전에 못푼문제의 유형이 두가지의 정보가 연관이 있다는점. 그러한 점에서 pair이라는 STL을 써보고자 하였다.
- 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 붙이든말든 오름차순으로 나오네? 나중에 안귀찮을때 다시 봐야겠다===============정리 끝

'🖋️PS' 카테고리의 다른 글
색종이 2563 c++ (이중배열 이용) (0) | 2023.01.03 |
---|---|
백준 단어뒤집기2 17413 c++(이중vector, tag기능) (1) | 2022.12.24 |
덱 10866 c++ (0) | 2022.12.23 |
1158 요세푸스 문제 c++ (1. 큐로 풀기) (0) | 2022.12.23 |
백준 1406 에디터 c++ (1) | 2022.12.02 |