포스트

[공부] 백준 11650 좌표 정렬하기 C++

[공부] 백준 11650 좌표 정렬하기 C++

📝 문제


🔍 문제 상황

문제 상황1 문제 상황2


💡 해결 방법 / 접근 방식

  • 해당 문제는 2차원 벡터(배열)을 사용하여야 하며, n개의 줄만큼 x,y 좌표를 받는 것이기에 행을 n으로, 열을 2로 잡아도 무관합니다.
  • 저는 2차원 벡터를 사용하여 풀었으며, 입력을 받자마자 초기화를 시키기 위해
    1
    
    vector<vector<int>> v(n, vector<int>(2, 0));
    
  • 를 하였고,
  • 그 결과 아래와 같은 벡터가 생성됩니다.
    1
    2
    3
    4
    5
    6
    7
    
    v = [
    [0, 0],
    [0, 0],
    [0, 0],
    [0, 0],
    [0, 0]
    ]
    
  • 출처: https://developer-cat.tistory.com/17

접근 방식

  • 그래서 위와 같이 2차원 벡터를 우선 생성 후, 입력을 받고, sort() 함수를 통해 배열을 오름차순으로 정리한 뒤, 벡터를 순서대로 출력하면 됩니다.

🛠️ 구현 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int n;

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

    cin >> n;
    // m*2인 2차원 벡터를 0으로 초기화 하여 선언
    // 참고: http://developer-cat.tistory.com/17
    vector<vector<int> > v(n, vector<int>(2, 0));
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < 2; ++j) {
            cin >> v[i][j];
        }
    }
    sort(v.begin(), v.end());
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < 2; ++j) {
            cout << v[i][j] << " ";
        }
        cout << "\n";
    }

    return 0;
}

🧷 결론

  • 2차원 벡터의 행과 열을 이해하면 풀어내기 쉬운 문제이며, 굳이 벡터를 사용하지 않더라도 배열을 통해서도 풀 수 있을 것 같습니다.
  • 추가적으로 2차원 벡터이기에, 중첩 for문을 사용하여 2차원 벡터를 출력해야합니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

인기 태그