티스토리 뷰
https://www.acmicpc.net/problem/11651
11651번: 좌표 정렬하기 2
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
www.acmicpc.net
엄~첨 쉽다.
근데 sort함수를 사용하는 중간에 compare함수를 인자로 주어 정렬을 내가 원하는 대로 할 수 있는 방법이 있다. 하지만, 이것을 작성하는 중간에 헷갈리는 요소가 있어 틀렸다.. 이런 실수가 다시는 발생하지 않도록 하기 위해 글을 작성한다.
우선 코드부터 소개하겠다.
sort함수에 대해 알고 싶은 사람은 다음 글을 참고하라.
[C++] algorithm 라이브러리
1. sort 알고리즘 include void sort(start, end); algorithm 헤더파일에 sort알고리즘이 속해 있으며 start와 end는 iterator형으로 받는다. 예시로 다음과 같다. #include #include vector v = {4,3,1,5,6}; sor..
jhcard.tistory.com
bool compare(std::pair<int, int> a, std::pair<int, int> b) {
if (a.second > b.second) return false;
else if (a.second == b.second && a.first > b.first) return false;
return true;
}
int main(void) {
int N = readInt();
std::vector<std::pair<int, int>> v(N);
for(int i = 0; i<N; i++) v[i] = { readInt(), readInt() };
std::sort(v.begin(), v.end(), compare);
for (auto it = v.begin(); it != v.end(); it++) {
writeInt(it->first); write(' ');
writeInt(it->second); write('\n');
}
bflush();
}
FastIo에 대한 코드 내용은 생략하였다. 궁금하다면 다음 글을 참고하라.
[C++] 예외..
아마 이 글은 백준 코딩용이 될 것이다. 풀면서 시간이나 메모리를 절약할 수 있는 방법이 있는 글이다. 주로 FastIO를 다룰 것 같다. 우선 readInt, readChar, writeInt에 대해 다뤄보자. 우선 read부분을
jhcard.tistory.com
코드를 보면 중간에 sort함수에 인자로 compare가 들어간 것을 볼 수 있다. 위의 코드 중 compare는 함수로 표현되어 있다. 그러니까 함수를 생성하고, 그 함수를 sort함수의 인자로 보낼 수 있다는 것이다. 조금 생소하겠지만, 함수도 인자로 전달이 될 수 있다. 반환형을 bool형으로 해주어 만약 a와 b를 비교하여(pair)true가 나오는 쪽이 더 앞쪽에 배치되게 된다.
생각하라. true가 나오면 왼쪽(앞쪽)에 배치된다. 그러니까 이렇게 생각하면 편하다. a는 왼쪽에 있는 요소이고, b는 오른쪽에 있는 요소인데 이 상태에서 true가 나오는 방향이 왼쪽이 되는 것이다.
만약 다음과 같은 예시가 있다고 하자.
#include <cstdio>
#include <algorithm>
bool compare(int a, int b) {
return a < b;
}
int main(void) {
int arr[] = { 6,4,1,2,6,2,7,9 };
std::sort(arr, arr + 8, compare);
for (int i = 0; i < 8; i++) printf("%d ", arr[i]);
}
이 경우 오름차순으로 정렬이 된다.
하지만 compare함수를 다음과 같이 변경한다면
bool compare(int a, int b){
return a > b;
}
내림차순으로 정렬이 된다.
참고하기 바란다.
'코딩테스트 > Silver 5' 카테고리의 다른 글
[S5] 10814. 나이순 정렬 (0) | 2022.07.03 |
---|---|
[S5] 11653. 소인수분해 (0) | 2022.07.03 |
[S5] 11866. 요세푸스 문제 0 (0) | 2022.07.03 |
[S5] 1676. 팩토리얼 0의 개수 (0) | 2022.07.03 |
[S5] 10815. 숫자 카드 (0) | 2022.07.02 |
- Total
- Today
- Yesterday
- manber myers
- 비트마스킹
- Set
- portal1
- list
- ios::sync_with_stdio(false)
- 해시맵
- 플로이드-워셜
- readString
- 행렬 멱법
- fastIo
- readInt
- 분할정복
- SCC 알고리즘
- 확장 유클리드
- cin.tie(nullptr);
- 트리보나치
- writeInt
- 피보나치
- writeString
- scanf
- tsp알고리즘
- Witcher3
- fread
- 큰 수 계산
- deque와 vector의 차이
- unistd.h
- bits/stdc++.h
- 좌표 압축 알고리즘
- 에라토스테네스의 체
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |