본문 바로가기

Java/백준

[JAVA] 백준 11650 좌표 정렬하기

11650번: 좌표 정렬하기 (acmicpc.net)

 

11650번: 좌표 정렬하기

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

www.acmicpc.net

 

풀이 과정 

 

- 2차원 배열을 정렬하기 위해서 Comparator를 Override하여 정렬 기준을 제시하는 방법으로 진행 

- 첫 번째 기준이 같다면 두번째 기준으로 오름차순 정렬

- 첫 번째 기준이 같지 않다면 첫 번째 기준으로 오름차순 정렬

 

import java.util.Scanner;
import java.util.Arrays;
import java.util.Comparator;

public class Main {
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        
        int num = sc.nextInt();
        
        int xy[][] = new int[num][2];
        
        for(int i=0; i<xy.length; i++)
        {
           for(int j=0; j<xy[i].length;j++)
           {
               xy[i][j] = sc.nextInt();
           }
        }
        
      Arrays.sort(xy, new Comparator<int[]>() {
    	  @Override
    	  public int compare(int[] o1, int[] o2) {
    		  if(o1[0] == o2[0])
    			  //두 번째 기준으로 오름차순
    			  return o1[1] -o2[1];
    		  else
    			  //첫 번째 기준으로 오름차순
    			  return o1[0]-o2[0];
    	  }
      });
       
        for(int i=0; i<xy.length; i++)
        {
            for(int j=0; j<xy[i].length; j++)
            {
                System.out.print(xy[i][j]+" ");
            }
            System.out.println();
        }
        
        
    }
}

 

- 그러나 시간초과가 뜸...

 

- BufferedReader, BufferedWriter 사용해서 다시 품 

 

StringTokenizer 클래스 

- 특정 문자열을 구분자를 통해 잘라서 관리할 수 있는 클래스 

- 토큰(Token) = 구분자를 통해 잘려진 문자 

 

int countToklens()

 - 남아 있는 토큰의 개수를 반환

 

boolean hasMoreElements()

 - 현재 위치 뒤에 사용할 수 있는 토큰이 남아 있는 경우 true, 그렇지 않으면 false를 반환 

 

Object nextElement()

 - 다음 토큰을 Object 타입으로 변환 

 

String nextToken()

 - 다음 토큰을 String 타입으로 변환 

 

 

정답 

 

참고 블로그 

[백준] 11650번 : 좌표 정렬하기- JAVA[자바] - 정렬 - 티스토리 (tistory.com)

 

[백준] 11650번 : 좌표 정렬하기- JAVA[자바] - 정렬 - 티스토리

오늘의 토픽 : Sort && Comparator , Comparable https://www.acmicpc.net/problem/11650 11650번: 좌표 정렬하기 첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주

beingdesigner.tistory.com

 

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        int num = Integer.parseInt(br.readLine());
        
        int xy[][] = new int[num][2];
        
        for(int i=0; i<num; i++)
        {
        	StringTokenizer st = new StringTokenizer(br.readLine());
        	int x = Integer.parseInt(st.nextToken());
        	int y = Integer.parseInt(st.nextToken());
        	
        	xy[i][0] = x;
        	xy[i][1] = y;
        }
        
      Arrays.sort(xy, new Comparator<int[]>() {
    	  @Override
    	  public int compare(int[] o1, int[] o2) {
    		  if(o1[0] == o2[0])
    			  //두 번째 기준으로 오름차순
    			  return o1[1] -o2[1];
    		  else
    			  //첫 번째 기준으로 오름차순
    			  return o1[0]-o2[0];
    	  }
      });
       
      for(int[] i : xy) {
    	  bw.write(i[0]+" "+i[1]);
    	  bw.write("\n");
      }
      
      bw.flush();
      bw.close();
        
    }
}

 

'Java > 백준' 카테고리의 다른 글

[JAVA] 백준 10814 나이순 정렬  (0) 2024.02.07
[JAVA] 백준 1181 단어 정렬  (1) 2024.02.07
[JAVA] 백준 1427 소트인사이드  (0) 2024.02.07
[JAVA] 백준 10898 수 정렬하기 3  (0) 2024.02.06
[JAVA] 백준 2751 수 정렬하기 2  (1) 2024.02.06