https://www.acmicpc.net/problem/11650
좌표 정렬하기 성공
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 | 256 MB | 9352 | 4754 | 3592 | 51.646% |
문제
2차원 평면 위의 점 N개가 주어진다. 좌표를 x좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
출력
첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.
예제 입력 1
5 3 4 1 1 1 -1 2 2 3 3
예제 출력 1
1 -1 1 1 2 2 3 3 3 4
이 문제를 풀기 위해서는 Comparable 과 Comparator이라는 기능에 대해서 정확히 알고 있어야 한다.
https://cwondev.tistory.com/15
간단히 정리하자면, Comparable은 implements Comparable<T> 로 사용하여 compareTo 메소드를 override 하는 것이고
Comparator는 ~~(객체면 Collections, 배열이면 Arrays, int면 interger ).sort( 정렬대상[을 담은 list, 2차원배열 등] , new Comparator<T>() { } 형태로 사용하면 된다.
코드는 https://blog.naver.com/occidere/220826851821 에 나와있는대로 작성하였다.
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 33 34 35 36 37 38 39 40 41 42 43 44 | import java.util.Arrays; import java.util.Comparator; import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[][] d = new int[n][2]; for(int i=0 ; i <n ; i++) { d[i][0] = sc.nextInt(); d[i][1] = sc.nextInt(); } Arrays.sort(d, new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) { // TODO Auto-generated method stub if(o1[0] == o2[0]) { return Integer.compare(o1[1],o2[1]); } else return Integer.compare(o1[0], o2[0]); } }); for(int i=0 ; i< n ; i++) { System.out.println(d[i][0]+" "+d[i][1]); } sc.close(); } } | cs |
'알고리즘 문제 (백준저지) > 기타' 카테고리의 다른 글
[java] String 배열을 int 배열로 바꾸는 방법 (0) | 2019.08.22 |
---|---|
[백준/10808/문자열] 알파벳 개수 (Java/코드) (0) | 2019.03.03 |
[백준/10845] 큐 (Java/코드) (0) | 2019.03.03 |
[알고리즘] 입출력 문제풀어보기 (0) | 2019.01.31 |
[알고리즘 기초] 문자열 조작1 - 문자열 역순으로 저장 (0) | 2019.01.27 |