알고리즘 연습
[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);
}
}