www.acmicpc.net/problem/11651

 

11651번: 좌표 정렬하기 2

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

www.acmicpc.net

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

// 정렬 기준
bool yFirst(pair<int,int> x, pair<int,int> y)
{
  // y값이 같을 경우에는 x값 오름차순
  if(x.second == y.second)
  {
    return x.first < y.first;
  }
  // y값 오름차순
  else
  {
    return x.second < y.second;
  }
}

int main(void)
{
  ios_base::sync_with_stdio(0);
  cin.tie(0);

  int n = 0;
  cin >> n;

  vector<pair<int,int>> v;

  for(int i = 0 ; i < n ; i++)
  {
    int x, y;
    cin >> x >> y;
    v.emplace_back(pair<int,int>(x,y));
  }

  sort(v.begin(), v.end(), yFirst);

  for(int i = 0 ; i < n ; i++)
  {
    cout << v[i].first << " " << v[i].second << '\n';
  }
}

 

[Try]

1. 페어 사용해서 정렬하기

2. 정렬할 기준 함수 정의해주기

 

[Point]

1. 정렬에 주는 키 조건에 y값만 비교할 경우 y값이 같을 때는 입력된 순서 그대로 나오기 때문에, y값이 같을 경우 x 값에 따른 정렬도

     주어야 한다.

2. set을 사용해서 자동 정렬되게끔 하신 분도 계심

3. 굳이 정렬할 때 기준을 줄 필요 없이, 페어를 만들 때 y값을 first 로 넣으면 자동으로 정렬이 되는 거였다..!!

 

[More]

1. 벡터 말고 배열로도 사용해보기

'PS > BOJ' 카테고리의 다른 글

[백준] 10989.cpp : 수 정렬하기 3  (0) 2020.05.15
[백준] 2108.cpp : 통계학  (0) 2020.05.15
[백준] 7568.cpp : 덩치  (0) 2020.05.14
[백준] 1436.cpp : 영화감독 숌  (0) 2020.05.13
[백준] 11866.cpp : 요세푸스 문제 0  (0) 2020.05.12

+ Recent posts