알고리즘/백준
백준 1181번 단어 정렬 자바 Java
김발자~
2022. 9. 29. 18:53
반응형
백준 9단계 9번 문제 - 1181 단어 정렬
https://www.acmicpc.net/problem/1181
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
9. 정렬 (9) 백준 1881번 문제 단어 정렬
문제
오답
comparator에 익숙하지 않아서 없이 해보려다가...
코드 남기는 것도 민망할 만큼 엉망이라 그냥 지워버렸다
정답 인정 코드
지금 자바의 정석 8장을 듣고 있지만, 11장에서 comparator에서 다룬 영상이 있길래 잠깐 봤다
Comparator
compare(Object o1, Object o2)
비교해서 양수면 왼쪽이 크고 0이면 같고 음수면 오른쪽이 크다
(조건에 해당하면 위치를 바꿔주는 것)
compareTo()
→둘다 반환값은 int형
이정도로 개념 정리하고
https://st-lab.tistory.com/112
이 블로그를 참고했다
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
30
31
32
33
34
35
36
37
38
39
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
String[] arr = new String[n];
for(int i = 0; i < n; i++) {
arr[i] = br.readLine();
}
Arrays.sort(arr, new Comparator <String>(){
public int compare(String s1, String s2) {
if(s1.length() == s2.length()) { //길이가 같다면
return s1.compareTo(s2); //compareTo = 사전순 정렬
}else {
return s1.length() - s2.length(); //길이가 다르다면 오름차순으로 순서 바뀜
}
}
});
sb.append(arr[0]).append('\n'); //뒤의 문자열과 비교할 문자열 먼저 출력
for(int i = 1; i < n; i++) {
if(!arr[i].equals(arr[i-1])) { //arr[i]가 바로 앞에 출력된 문자열과 같지 않다면(중복이 아니라면)
sb.append(arr[i]).append('\n'); //출력
}
}
System.out.println(sb);
}
}
|
cs |
이해하기 힘들었던 부분을 최대한 풀어서 썼다
직후 백지 복습
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
30
31
32
33
34
|
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
int n = sc.nextInt();
String arr[] = new String[n];
for(int i = 0; i < n; i++) {
arr[i] = sc.next();
}
Arrays.sort(arr, 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();
}
}
});
System.out.println(arr[0]);
for(int i = 1; i < n; i++) {
if(!arr[i].equals(arr[i-1])) {
sb.append(arr[i]).append('\n');
}
}
System.out.println(sb);
}
}
|
cs |
BufferedReader로 풀었으니 Scanner로도 해봤다 확실히 br이 훨~씬 빠르다
드디어 comparator가 들어간 코드를 틀린 부분 없이 완전히 쳤다..
감동.. 무작정 외우는 것도 안 된다면 가끔 개념을 이해하려고 더더더 노력해야 하나보다
혼자 오래 생각했는데도 결국 적절한 알고리즘을 생각해내지 못한 건 아쉽지만
그래도 역시 재밌는 건 사실이다
반응형