본문 바로가기
[ 다먹살 ]/- Coding

[백준] 11651 좌표 정렬하기2

by 엉망으로살기 2021. 9. 15.
반응형

https://www.acmicpc.net/problem/11651

 

11651번: 좌표 정렬하기 2

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

www.acmicpc.net

 

나는 별도의 좌표 클래스를 만들어서 Collections.sort 메소드를 통해 정렬을 했지만, 아마 정렬 카테고리에 있는 걸 보니 배열이나 정렬 등을 통해서 별도의 풀이가 있을 것 같다는 느낌이 들어서 한 번 찾아볼만할 것 같다.

하지만 일반적인 다른 문제에서도 이 방법은 굉장히 유용하기 때문에 풀어온 느낌대로 해결했다. 난이도 자체는 높지 않다.

 


문제 및 입출력

 


코드

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

public class Main
{
     // 2차원 좌표데이터 클래스
     static class point
     {
         int x;
         int y;

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

    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        ArrayList<point> list = new ArrayList<point>();
        int t = sc.nextInt();
        
        for(int i=0; i<t; i++)
        {
         // 입력받는 좌표데이터를 리스트에 add
         list.add(new point(sc.nextInt(), sc.nextInt()));
        }
        
        // 정렬 실행
        Collections.sort(list, new Comparator<point>()
        {
         @Override
         public int compare(point o1, point o2)
         {
                 // y좌표가 같지 않을 때에는 y좌표를 기준으로 오름차순 정렬
                  if(o1.y!=o2.y)
                 {
                     return o1.y>o2.y?1:-1;
                 }
                 // y좌표가 같을 때에는 x좌표를 기준으로 오름차순 정렬
                 else
                  {
                     return o1.x>o2.x?1:-1;
                 }
             }         
         });
        
        for(point data : list)
        {
          System.out.println(data.x + " " + data.y);
        }
    }
}

 

반응형

'[ 다먹살 ] > - Coding' 카테고리의 다른 글

[백준] 1978 소수 찾기  (0) 2021.09.18
[백준] 10871 X보다 작은 수  (0) 2021.09.17
[백준] 4344 평균은 넘겠지  (0) 2021.09.14
[백준] 1110 더하기사이클  (0) 2021.09.14
[백준] 2884 알람시계  (0) 2021.09.14

댓글