백준 - JAVA/정렬
[백준] 1181번 : 단어 정렬 _ JAVA ( 주석 설명 )
wch_s
2023. 2. 9. 14:27
1번
→ Arrays.sort(T[] a, Comparator<? super T> c) 에서
Comparator 의 compare 를 재정의 함으로써 원하는 정렬(길이순, 사전순)을 한다.
String에 정의되어 있는 Comparable의 compareTo 를 사용하지 않고, 직접 사전순 정렬한 코드이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //빠른 입력을 위해 버퍼를 이용해 입력을 받는다.
StringBuilder sb = new StringBuilder(); //빠른 출력을 위해 StringBuilder를 사용한다.
int N = Integer.parseInt(br.readLine()); //단어의 갯수를 입력받는다.
String[] ary = new String[N]; //입력할 단어들이 저장할 배열을 생성한다.
for(int i=0;i<N;++i){ //입력한 단어들을 배열에 저장한다.
ary[i] = br.readLine();
}
Arrays.sort(ary, (a,b) -> { //ary를 정렬할 기준(Comparator의 compare)을 만든다.
if (a.length() == b.length()) { //길이가 같을 때는 사전순으로 비교하여 오름차순으로 정렬한다.
for (int i = 0; i < a.length(); ++i) { //사전순 비교이다.
if (a.charAt(i) != b.charAt(i)) {
return a.charAt(i) - b.charAt(i);
}
}
} else { //길이가 다를 때는 문자열의 길이순 우선 오름차순 정렬한다.
return a.length() - b.length();
}
return 0;
});
for(int i=0;i<N-1;++i){
if(!(ary[i].equals(ary[i+1]))) //중복된 단어는 하나만 남기고 제거해야 하므로 중복되지 않았을 경우 출력값에 저장한다.
sb.append(ary[i]).append('\n');
}
sb.append(ary[N-1]); //마지막 인덱스 값은 중복된 값이 아니므로(약간의 예시 배열 그림만 그려보아도 알 수 있다.) 추가해준다.
System.out.println(sb); //조건에 따라 정렬한 단어를 출력한다.
}
}
2번
String에 정의되어 있는 Comparable의 compareTo 를 사용한 코드이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //빠른 입력을 위해 버퍼를 이용해 입력을 받는다.
StringBuilder sb = new StringBuilder(); //빠른 출력을 위해 StringBuilder를 사용한다.
int N = Integer.parseInt(br.readLine()); //단어의 갯수를 입력받는다.
String[] ary = new String[N]; //입력할 단어들이 저장할 배열을 생성한다.
for(int i=0;i<N;++i){ //입력한 단어들을 배열에 저장한다.
ary[i] = br.readLine();
}
Arrays.sort(ary, (a,b) -> { //ary를 정렬할 기준(Comparator의 compare)을 만든다.
if (a.length() == b.length()) { //길이가 같을 때는 사전순으로 비교하여 오름차순으로 정렬한다.
return a.compareTo(b);
} else { //길이가 다를 때는 문자열의 길이순 우선 오름차순 정렬한다.
return a.length() - b.length();
}
});
for(int i=0;i<N-1;++i){
if(!(ary[i].equals(ary[i+1]))) //중복된 단어는 하나만 남기고 제거해야 하므로 중복되지 않았을 경우 출력값에 저장한다.
sb.append(ary[i]).append('\n');
}
sb.append(ary[N-1]); //마지막 인덱스 값은 중복된 값이 아니므로(약간의 예시 배열 그림만 그려보아도 알 수 있다.) 추가해준다.
System.out.println(sb); //조건에 따라 정렬한 단어를 출력한다.
}
}