본문 바로가기
공부기록/[Algorithm]

백준 11650번 <좌표 정렬하기> - C++

by RiverWon 2024. 8. 17.

이번 문제는 생각보다 짱빨리 풀어버렸고, 새로운 개념을 하나 배워서 포스팅한다!

 

로직은 매우 단순함

1. x좌표 오름차순 정렬

2. x좌표가 같다면, y좌표 오름차순 정렬

 

바로 어제 벡터의 개념에 대해서 간단하게 배웠는데, 활용해 볼 아주 좋은 (?) 문제이다

test case : n

x increase
if x same -> y increase

priority
1. x increase
2. y increase
easy

declare 2 int type vectors or 1 int type 2dim vector
1 int type 2dim vector

 

뭐 메모는 당연히 단순하게 작성되었다.

 

나의 고민은 나와있듯이

2개의 1차원 벡터를 사용할 것이냐

1개의 2차원 벡터를 사용해 볼 것이냐

 

후자를 골랐다. 이유는 뭐.. 언젠가는 더 고급 문제에서 사용해보자 해서 미리미리 뚜드려 맞자는 마인드였다

 

2차원 벡터를 선언하는 방법은 다음과 같다.

vector < vector <int>> v;
vector <int> v1;

벡터 안에 벡터가 들어가야 해서, v1은 임의로 선언해 뒀다. 2차원 배열이랑 크게 다를 건 없고, 도식화하면 아래와 같다.

세로(v1)는 push_back하는 개수에 따라 그 길이가 달라질 것!

 

간단하게 cin으로 각각 입력 받아서, sort함수 돌려줬다. 주의할 점은, sort함수를 쓸 때 배열처럼 sort(arr, arr+n)방식이 아니라, sort(v.begin(), v.end())로 시작과 끝을 int형태로 명시해준다

 

#include <algorithm>
#include <cmath> //C++
#include <iostream>
#include <math.h> //C
#include <string>
#include <vector>

using namespace std;

int main() {

  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);

  int n;
  cin >> n;


  vector <vector <int>> v(n);
  vector <int> v1(2);
  for(int i=0;i<n;i++){
    cin >> v1[0] >> v1[1];
    v[i].push_back(v1[0]);
    v[i].push_back(v1[1]);
  }
  sort(v.begin(), v.end());
  for(int i=0;i<n;i++){
    cout << v[i][0] << ' ' << v[i][1] << '\n';
  }



  return 0;
  
}