제가 풀어본 문제를 올리는 것으로 코드가 전혀 완벽하지 않습니다.
태클 걸어주세요.
문제

이전에 풀지 못했던 문제..
11650번: 좌표 정렬하기
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
www.acmicpc.net
이 문제를 배우면서 함께 배웠던 comparator 이걸 알면 어렵지 않게 풀 수 있는 문제였습니다.
코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Set;
public class Q1181 {
//단어정렬
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(bf.readLine());
String[] arr = new String[N];
for(int i=0;i<N;i++){
arr[i] = bf.readLine();
}
//중복 없애기 위해 set으로 만들었다가 다시 array로
Set<String> set = new HashSet<>(Arrays.asList(arr));
arr = set.toArray(new String[0]);
Arrays.sort(arr,new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if(o1.length()<o2.length()) {//길이가 더 작을경우
return -1;
}else if(o1.length()==o2.length()) { //길이가 같을경우
return compareString(o1, o2); //String의 비교
}
return 1;
}
});
for(String str:arr) {
bw.write(str +"\n");
}
bw.flush();
bw.close();
bf.close();
}
public static int compareString(String str1,String str2) {
char[] chrArr1 = str1.toCharArray();
char[] chrArr2 = str2.toCharArray();
int len = str1.length(),i=0;
while(i!=len) {
if(chrArr1[i] == chrArr2[i]) {
i++;
}else if(chrArr1[i] > chrArr2[i]) {
return 1;
}else if(chrArr1[i] < chrArr2[i]) {
return -1;
}
}
return 0;
}
}
코드설명
comparator를 알고 있느냐 아니냐의 문제 인거 같습니다.
'코딩테스트 > 백준' 카테고리의 다른 글
[백준/1260] DFS와 BFS - 자바 (0) | 2021.07.24 |
---|---|
[백준/10814] 나이순 정렬 - 자바 (0) | 2021.07.22 |
[백준/1427] 소트인사이드 - 자바 (0) | 2021.07.19 |
[백준/10989] 수 정렬하기3 - 자바 (0) | 2021.07.16 |
[백준/2751]수 정렬하기2 - 자바 (0) | 2021.07.11 |