페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#8557

Tutorial : STL Pair 2s 1024MB

문제

2차원 상에서 모든 정수점의 좌표는 (x, y) 형태의 순서쌍으로 표현된다.

이런 점들을 여러 개 만드려면 어떻게 해야 할까?

int 변수 2개가 들어있는 구조체를 만들어도 되지만, 이번 시간에 배울 pair 자료형 으로 관리해도 된다.

pair 자료형은 #include <utility> 헤더에 들어있다. using namespace std; 또한 해주자.

( utility 헤더는 <algorithm> 안에 포함되어 있는 경우가 많아서, <algorithm> 헤더만 추가해도 되긴 하다. )

pair <자료형, 자료형> 으로 선언한다.

만약 정수점의 좌표처럼 (정수, 정수) 라면 pair <int, int> 이 될 것이다.

(문자열, 정수) 순서 쌍을 원한다면 pair <string, int> 로 선언하면 된다.

pair 를 선언하고 값을 대입하는 방법은 아래와 같이 여러 가지다.

pair <int, int> a;

a = {2, 5};  // ①

a = make_pair(2, 5); // ②

a.first = 2; 
a.second = 5; // ③

① 의 방법처럼 중괄호를 씌워서 값을 대입해도 되고,

② 의 방법처럼 make_pair 함수를 이용해도 되며,

③ 의 방법처럼 두 원소 각각 값을 따로 대입해도 된다.

여기서 앞 원소는 (pair 변수 이름).first , 뒤 원소는 (pair 변수 이름).second 가 된다. 이는 문법이므로 외워주어야 한다.

pair 여러 개가 들어 있는 자료구조를 정렬하면 어떻게 될까?

별다른 정렬 기준을 직접 설정하지 않는 이상,

기본적으로 first (앞 원소) 값을 기준으로 정렬하고,

first (앞 원소) 값이 동일한 것들끼리는 second (뒤 원소) 를 기준으로 정렬하게끔 설계되어 있다.

이제 이를 응용한 간단한 연습문제를 풀어보자.


입력

첫 줄에 정수 점의 개수 N이 입력된다. ( 1 ≤ N ≤ 100,000 )

두 번째 줄에는 N 개의 점의 x 좌표와 y 좌표가 입력된다. ( 모두 10,000 이하의 자연수 )


출력

이 점들을 x 좌표 기준으로, x 좌표가 같은 점들끼리는 y 좌표 기준으로 오름차순 정렬한 후,

정렬된 순서대로 ( x 좌표 와 y 좌표의 곱 ) 을 N 줄에 걸쳐 출력하자.

실력 향상을 위해, 반드시 pair 자료형을 이용하여 구현해보자!


예제

5
9 3
1 8
1 4
1 5
2 3
4
5
8
6
27

점들을 정렬하면

(1, 4)

(1, 5)

(1, 8)

(2, 3)

(9, 3)

이다.

이후 각 점마다 x 좌표와 y 좌표의 곱을 구하여 출력하면 된다.




출처

againalgo

로그인해야 코드를 작성할 수 있어요.