문제설명
입출력 예제
개념
좌표를 오름차순으로 정렬하는 문제다. 이때 x좌표가 동일하다면 y좌표가 증가하는 순서로 정렬해야 한다. 구조체와 연산자 오버로딩을 이용해 데이터가 큰 경우 효율적으로 좌표를 정렬하는 방법이 있고, std::pair<>를 이용해 좌표를 정렬하는 방법이 있다.
std::pair<>는 처음 등장하는 개념이므로 간략하게 이해하고 가자.
std::pair는 간단하게, 두 객체를 단일 객체로 처리하는 기능을 제공하는 구조체다.
풀이 (1)
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
int N;
std::cin >> N;
std::vector<Coordinate> v;
점의 숫자 N을 초기화하고, Coordinate라는 구조체를 받는 벡터 v를 초기화해 주자.
struct Coordinate
{
int x, y;
bool operator < (const Coordinate& other) const
{
return (x < other.x) || (x == other.x && y < other.y);
}
};
해당 문제에서는 (x,y)의 꼴로 좌표가 생성되므로, x좌표와 y좌표를 int형으로 선언한다. 그리고 크기를 비교할 연산자 <를 오버로딩해 주자.
while (N--)
{
int x, y;
std::cin >> x >> y;
v.push_back({ x,y });
}
std::sort(v.begin(), v.end());
for (Coordinate c : v)
std::cout << c.x << ' ' << c.y << '\n';
}
N개의 점을 벡터 v에 초기화해 준다. 그리고 정렬을 한 다음, 범위 기반 for문을 통해 좌표를 출력해 주면 된다.
총합본
#include <iostream>
#include <vector>
#include <algorithm>
struct Coordinate
{
int x, y;
bool operator < (const Coordinate& other) const
{
return (x < other.x) || (x == other.x && y < other.y);
}
};
int main()
{
int N;
std::cin >> N;
std::vector<Coordinate> v;
while (N--)
{
int x, y;
std::cin >> x >> y;
v.push_back({ x,y });
}
std::sort(v.begin(), v.end());
for (Coordinate c : v)
std::cout << c.x << ' ' << c.y << '\n';
}
풀이 (2)
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
int N;
std::vector<std::pair<int, int> > v;
std::cin >> N;
풀이(1)와 마찬가지로 점의 숫자 N을 초기화한다. 그리고 (x,y)의 형태인 pair를 받는 벡터 v를 초기화해 주자.
while(N--)
{
int x, y;
std::cin >> x >> y;
v.push_back(std::make_pair(x, y));
}
std::sort(v.begin(), v.end());
for (std::pair<int, int> p : v)
std::cout << p.first << ' ' << p.second << '\n';
}
N개의 점을 벡터 v에 초기화해 준다. 그리고 정렬을 한 다음, 범위 기반 for문을 통해 좌표를 출력해 주면 된다.
총합본
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
int N;
std::vector<std::pair<int, int> > v;
std::cin >> N;
while(N--)
{
int x, y;
std::cin >> x >> y;
v.push_back(std::make_pair(x, y));
}
std::sort(v.begin(), v.end());
for (std::pair<int, int> p : v)
std::cout << p.first << ' ' << p.second << '\n';
}
반응형
'Algorithm > 백준' 카테고리의 다른 글
[백준] 10814 나이순 정렬 with C++ (0) | 2023.04.14 |
---|---|
[백준] 1181 단어 정렬 with C++ (0) | 2023.04.13 |
[백준] 1427 with C++ (0) | 2023.04.11 |
[백준] 2751 with C++ (0) | 2023.04.10 |
[백준] 1929 with C++ (0) | 2023.04.06 |