꾸물꾸물 졔의 개발공부
백준 1181 - 단어정렬 (JAVA) 본문
Arrays.sort() 를 이용해서 입력받은 문자열들을 정렬하려고 했지만, 여러가지 조건들이 붙어있다.
1. 같은 길이일 경우엔, 사전 순
2. 같은 문자가 여러개 중복되있을 경우엔 하나만 출력
이를 위해, Arrays.sort 의 comparator 을 사용하였다.
기본 구조로는 ,
Arrays.sort() 의 매개변수로는 정렬할 배열 , comparator<자료형> 이다.
Arrays.sort ( 입력받은 문자열 배열, new Comparator<String> () {
public int compare( 비교변수 1, 비교변수 2 ) {
1. 길이가 같을 경우엔 비교변수 1 과 비교변수 2 를 비교
2. 길이가 다르다면, 비교변수 1의 길이 - 비교변수 2의 길이하여, 양의 정수이면 비교변수 1 의 길이가 더 긴것이므로 두개의 위치를 변환 !
}
});
에서 반환형인 int 인 이유는,
- 양의 정수
- 0
- 음의 정수
중 하나의 형태로 반환 받아, 양의 정수일 경우엔 두개의 비교변수의 위치를 바꾸고,
0이나 음의 정수일 경우엔 그대로 둔다 .
--------정렬후엔 ,
문자열 길이 순서대로 정렬이 이미 되어있으므로, 앞 뒤 이웃한 문자열의 형태가 다르다면, stringbuilder 에 append 하고, 그렇지 않다면 무시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
package jihye01;
import java.util.*;
import java.io.*;
public class bj1181 {
public static void main(String args[]) throws IOException {
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
int num=Integer.parseInt(br.readLine());
String get[]= new String[num];
for(int i=0; i<num; i++)
get[i]=br.readLine();
Arrays.sort(get, new Comparator<String>() {
public int compare(String s1, String s2) {
if(s1.length()==s2.length())
return s1.compareTo(s2);
else
return s1.length()-s2.length();
}
});
StringBuilder sb= new StringBuilder();
sb.append(get[0]).append('\n');
for(int i=1; i< num; i++) {
if(!get[i].equals(get[i-1]))
sb.append(get[i]).append('\n');
}
System.out.println(sb);
}
}
|
cs |
'알고리즘 > 백준' 카테고리의 다른 글
백준 1874 - 스택수열 (JAVA) (0) | 2021.11.24 |
---|---|
백준 11650 - 좌표 정렬 (JAVA) + Arrays.sort 람다식 (0) | 2021.10.18 |
백준 4673 - 셀프넘버 (JAVA) (0) | 2021.09.13 |
백준 18258 - JAVA 큐 구현하기 (0) | 2021.07.16 |
백준 10828 - JAVA (시간초과 ..) (0) | 2021.07.15 |