알고리즘 연습

[11651] 좌표 정렬하기2 - Java

밀깜 2022. 2. 8. 10:41

 

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

1. 배운점

a) StringBuilder

StringBuilder can be used mainly through 'append' and 'insert' method.

Using insert method, you can insert string to the specific point

https://docs.oracle.com/javase/8/docs/api/

 

Java Platform SE 8

 

docs.oracle.com

StringBuilder sb = new StringBuilder();

String str = "This is example";

sb.append(str).insert(7, " great");
System.out.print(sb);

// 결과 : This is great example

 

b) compareTo를 사용할 때 String이 아닌 int로 비교해야 하는 이유

package test;

public class Test{

	public static void main(String[] args) {
		
		String [] arr = new String[] {"aa", "aa", "ad", "bb"};
		
		System.out.println(arr[0].compareTo(arr[1])); // 결과 : 0
		System.out.println(arr[0].compareTo(arr[2])); // 결과 : -3
		System.out.println(arr[0].compareTo(arr[3])); // 결과 : -1
		System.out.println(arr[2].compareTo(arr[1])); // 결과 : 3
		System.out.println(arr[3].compareTo(arr[1])); // 결과 : 1

	}
}

 

문자열로 compareTo를 사용해 대소비교를 할 때는 int로 비교할 때보다(0, 1, -1) 더 다양한 결과 값이 도출된다.

- 두 문자열이 완전히 같은 경우: 0

- 두 문자열의 처음 시작 문자가 같으나, 전체적으론 일부만 같은 경우: 일치하지 않는 지점의 문자의 ascii 값 차이

- 두 문자열이 아예 다른 경우: 첫 글자의 ascii 값 차이

 

 

2. 개선할 점

 

3. 궁금한 점

 

4. 풀이

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

public class Main {
	
	public static void main(String[] args) throws NumberFormatException, IOException {
		
		// Import java.io.BufferedReader
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		// Read the cases
		int N = Integer.parseInt(br.readLine());
		
		// Read locations using StringTokenizer
		int [][] arr = new int [N][2];
		for(int i = 0; i < N; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine(), " ");
			arr[i][0] = Integer.parseInt(st.nextToken());
			arr[i][1] = Integer.parseInt(st.nextToken());
		}
		
		// Sorting using Comparator
		Arrays.sort(arr, new Comparator<int []> () {

			@Override
			public int compare(int[] o1, int[] o2) {
				
				if(o1[1] == o2[1]) {
					return o1[0] - o2[0];
				} else {
					return o1[1] - o2[1];
				}
			}
		});
		
		// Printing result using StringBuilder
		StringBuilder sb = new StringBuilder();
		
		for(int i = 0; i < N; i++) {
			sb.append(arr[i][0]+ " " + arr[i][1]).append('\n');
		}
		System.out.println(sb);
	}
}