개발 지식 공유, 복습

백준- 11650(좌표 정렬하기) C++ 본문

알고리즘(백준)

백준- 11650(좌표 정렬하기) C++

like_sonny 2021. 8. 31. 01:12

https://www.acmicpc.net/problem/11650

 

11650번: 좌표 정렬하기

첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.

www.acmicpc.net

이번에도 정렬 문제이다. 2개의 좌표(x, y)가 주어지는데 이때 x 우선으로 정렬을 하고, x가 같을 시, y를 오름차순으로 정렬해줘야 한다.

 

그래서 이번에도 x, y 한 쌍을 사용하기 위해 pair와 vector을 사용하였다.

 

그리고 따로 설정을 안하면 pair의 앞쪽 기준으로 먼저 오름차순으로 정렬해주는 것으로 알고 있다. (앞쪽이 같을 경우엔 뒤쪽 오름차순으로 되는 것도 포함)

 

그래서 코드는 단순히 algorithm의 sort 내장 함수를 사용하였다. 그 결과...

 

바로 통과!

코드는 아래와 같다.

 

#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;

// x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬
int main()
{
  freopen("input.txt", "rt", stdin);
  int n;
  scanf("%d", &n);
  vector<pair<int, int>> vec(n);
  for (int i = 0; i < n; i++)
  {
    scanf("%d %d", &vec[i].first, &vec[i].second);
  }
  sort(vec.begin(), vec.end());
  for (int i = 0; i < n; i++)
  {
    printf("%d %d\n", vec[i].first, vec[i].second);
  }

  return 0;
}

'알고리즘(백준)' 카테고리의 다른 글

백준 - 2108(통계학) C++  (0) 2021.12.21
백준- 1920(수 찾기) C++  (0) 2021.09.01
백준 - 11651(좌표 정렬하기 2) C++  (0) 2021.08.31
백준-10814(나이순 정렬) C++  (0) 2021.08.28
백준-10989(수 정렬하기 3) C++  (0) 2021.08.28