728x90
 

11651번: 좌표 정렬하기 2

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

www.acmicpc.net

Java로 풀어보고 C++로도 풀어봤다.

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        ArrayList<Loc> list = new ArrayList<>();
        for(int i = 0; i < n; i++) {
            list.add(new Loc(in.nextInt(), in.nextInt()));
        }
        Collections.sort(list, new Comparator<Loc>() {
            @Override
            public int compare(Loc o1, Loc o2) {
                if(o1.y == o2.y)
                    return o1.x - o2.x;
                else
                    return o1.y - o2.y;
            }
        });
        for(Loc i : list)
            System.out.println(i);
    }
}
class Loc{
    int x;
    int y;

    public Loc(int x, int y) {
        this.x = x;
        this.y = y;
    }

    @Override
    public String toString() {
        return x + " " + y;
    }
}
#include <iostream> 
#include <vector> 
#include <queue> 
#include <algorithm>
using namespace std;

int main() {
	int n;
	cin >> n;
	vector<pair<int, int>> v;
	for (int i = 0; i < n; i++) {
		int x, y;
		cin >> x >> y;
		v.push_back(make_pair(y, x));
	}
	sort(v.begin(), v.end());
	for (pair<int, int> p : v) {
		cout << p.second << " " << p.first << '\n';
	}
	return 0;
}

 

pair는 첫 번째 원소(first)를 기준으로 오름차순 정렬, first가 같으면 두 번째 원소(second)를 기준으로 오름차순 정렬

728x90

+ Recent posts