728x90
문제
https://www.acmicpc.net/problem/11651
문제이해
- 첫째 줄에 N을 입력합니다.
- 두 번째 줄부터 N개의 좌표(x, y)를 입력합니다.
- 좌표를 기준에 맞게 정렬하여 출력합니다.
우선 좌표를 정렬하는 기준은 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순으로 되어있습니다. vector <pair <int, int>>에 x좌표와 y좌표를 저장하고 algorithm의 sort를 이용하여 정렬한 후 출력해 주면 끝입니다.
문제풀이
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<pair<int, int>> elements;
bool compare(pair<int, int>& A, pair<int, int>& B) {
if (A.second != B.second) {
return A.second < B.second;
}
else {
return A.first < B.first;
}
}
int main() {
cin.tie(NULL);
cout.tie(NULL);
ios_base::sync_with_stdio(false);
int T, x, y;
cin >> T;
while (T--) {
cin >> x >> y;
elements.push_back(make_pair(x, y));
}
sort(elements.begin(), elements.end(), compare);
for (int i{ 0 }; i < elements.size(); i++) {
cout << elements[i].first << " " << elements[i].second << "\n";
}
}
bool compare
해당 함수를 통해 문제에 주어진 기준에 맞는 정렬 규칙을 정해주었습니다. first는 x 좌표를 의미하고 second는 y 좌표를 의미합니다. y 좌표가 다를 경우에는 y에 대해 오름차순으로 y 좌표가 같을 경우에는 x에 대해 오름차순으로 정렬해 주면 됩니다.
문제후기
sort를 이용할줄만 안다면 매우 쉽게 풀 수 있는 문제였습니다.
728x90
'Coding' 카테고리의 다른 글
[C++]백준 1932번: 정수 삼각형 (0) | 2023.07.18 |
---|---|
[C++]백준 1522번: 문자열 교환 (0) | 2023.07.17 |
[C++]백준 1644번: 소수의 연속합 (0) | 2023.07.14 |
[C++]백준 2075번: N번째 큰 수 (0) | 2023.07.13 |
[C++]백준 1655번: 가운데를 말해요 (0) | 2023.07.13 |