반응형
<코드>
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
String arr[] = new String[N];
sc.nextLine();
for (int i = 0; i < N; i++) {
arr[i] = sc.nextLine();
}
// 1.길이순으로, 2.사전순으로
Arrays.sort(arr,new Comparator<String>() {
@Override
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])) continue;
System.out.println(arr[i]);
}
}
}
풀이 방법
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
// 1. 길이순으로 정렬
// 2. 사전순으로 정렬
}
});
Array.sort(arr, new Comparator <T>)는 인자를 2개를 받고 위의 문제에서는 기존의 규칙이 아닌 새로운 규칙으로 정렬을 해야 하므로 @overide (오버 라이딩)을 통해 Comparator에 있는 메서드인 compare를 재정의 합니다.
Arrays.sort(arr,new Comparator<String>() {
@Override
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])) continue;
System.out.println(arr[i]);
}
그리고 이전 문자열과 비교하면서 중복이라면 continue로 넘어가면서 문자열들을 출력합니다.
https://www.acmicpc.net/problem/1181
반응형
'🧩PS > 🥈Nomal' 카테고리의 다른 글
[JAVA] 백준 15650번 - N과 M (2) (0) | 2021.10.11 |
---|---|
[JAVA] 백준 15649번 - N과 M (1) (0) | 2021.10.11 |
[JAVA] 백준 10989번 - 수 정렬하기 3 (Counting Sort) (0) | 2021.10.07 |
[JAVA] 백준 2751번 - 수 정렬하기 2 (Tim sort) (0) | 2021.10.07 |
[JAVA] 백준 11729번 - 하노이 탑 이동 순서 (0) | 2021.10.05 |