Algorithm/백준

[백준] 11650 with C++

nowkoes 2023. 4. 12. 00:00

문제설명


입출력 예제


개념

 좌표를 오름차순으로 정렬하는 문제다. 이때 x좌표가 동일하다면 y좌표가 증가하는 순서로 정렬해야 한다. 구조체와 연산자 오버로딩을 이용해 데이터가 큰 경우 효율적으로 좌표를 정렬하는 방법이 있고, std::pair<>를 이용해 좌표를 정렬하는 방법이 있다.

 

 std::pair<>는 처음 등장하는 개념이므로 간략하게 이해하고 가자.

 

출처: https://en.cppreference.com/w/cpp/utility/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