관리 메뉴

cococo-coding

11651번. 좌표 정렬하기 2 본문

[BOJ] 코드 모음/C++_learning 문제집

11651번. 좌표 정렬하기 2

_dani 2024. 1. 7. 21:30

문제

풀이

백준의 11650번. 좌표 정렬하기 문제와 유사하다.

(11650번 문제: https://www.acmicpc.net/problem/11650 )

 

다른 점은 11650번은 x좌표->y좌표 순으로 오름차순 정렬이었다면

이 문제는 반대로 y좌표-> x좌표 순의 오름차순 정렬이라는 것이다.

 

11650번의 경우는 아래의 코드처럼 sort만 쓰면 자동으로 정렬이 되었다.

//11650번
sort(v.begin(), v.end());

 

반면 이번 문제는 y좌표를 먼저 비교하고, 그 이후에 x좌표를 비교해야 하기 때문에 따로 사용자정의함수를 만들었다.

//11651번

//y좌표를 먼저 비교하고 x좌표를 비교하는 함수 생성
bool cmp(pair <int, int> a, pair <int, int> b) {
 if(a.second==b.second) //y좌표가 같은 경우
 	return a.first<b.first; //x좌표를 비교해서 작은 것을 앞으로 배치한다.
   }
 else{
 	return a.second<b.second; 
 }
}

 

코드

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

/*
1. 점의 개수 n을 입력받는다.
2. n개의 점들의 좌표를 입력받는다.
3. 각 점들을 y좌표>x좌표 순으로 오름차순 정렬한다.
4. 정렬한 좌표들을 출력한다.
*/

 vector<pair<int,int>> v; //벡터 생성

bool cmp(pair<int, int> a, pair<int, int> b)
{
    if(a.second==b.second){ //y좌표가 같은 경우 
        return a.first<b.first;
    }
    else{
        return a.second<b.second;
    }
}


int main() {
    //1
    int n;
    cin >> n;

    //2
    int x,y;
    for (int i = 0; i < n; i++){
        cin >> x >> y;
        v.push_back({x,y}); //좌표 입력받기
    }

    //3
    sort(v.begin(), v.end(), cmp);

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

    return 0;
}

'[BOJ] 코드 모음 > C++_learning 문제집' 카테고리의 다른 글

10768번. 특별한 날 (c++풀이)  (0) 2024.01.09
5524번. 입실 관리 (c++ 풀이)  (3) 2024.01.09
11650번. 좌표 정렬하기  (1) 2024.01.07
2857번. FBI (c++풀이)  (0) 2024.01.07
4999번. 아! (c++ 풀이)  (0) 2024.01.07