21.08.27 기록
백준 알고리즘 1181 풀이
🎆나의 풀이(메모리 27.9MB, 시간 436ms로 통과)
-입력값을 HashSet에 담아 중복 요소를 제거한 후 String 배열에 저장한다.
-저장한 배열을 Comparator를 사용한 Arrays.sort로 정렬하여 풀이했다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
public class B1181 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
HashSet<String> hs = new HashSet<>();
for(int i = 0; i < N; i++) {
hs.add(br.readLine());
}
String[] strArr = new String[hs.size()];
Iterator<String> iterator = hs.iterator();
int idx = 0;
while(iterator.hasNext()) {
strArr[idx++] = iterator.next();
}
Arrays.sort(strArr, (s1, s2) -> {
if(s1.length() == s2.length()) {
for(int i = 0; i < s1.length(); i++) {
if(s1.charAt(i) != s2.charAt(i)) {
return s1.charAt(i) - s2.charAt(i);
}
}
}
return (s1.length() - s2.length());
});
StringBuilder sb = new StringBuilder();
for(int i = 0; i < strArr.length; i++) {
sb.append(strArr[i]).append("\n");
}
System.out.println(sb);
}
}
🎆해설(메모리 24.4MB, 시간 356ms로 통과)
-비교하는 두 문자열의 길이가 같은 경우 compareTo 메소드를, 중복 제거는 for문을 사용했다.
-
- compareTo(String 클래스)
- 두 문자열을 사전순으로 비교하는 메소드이다.
- 주어진 문자열이 인수로 받은 문자열보다 사전순으로 앞서면 음수값을 반환하고,
아닌 경우 양수값을 반환한다. - 두 문자열이 같을 때엔 0을 반환한다.
- compareTo(String 클래스)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class B1181 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
String[] strArr = new String[N];
for(int i = 0; i < N; i++) {
strArr[i] = br.readLine();
}
Arrays.sort(strArr, (s1, s2) -> {
if(s1.length() == s2.length()) { return s1.compareTo(s2); }
else { return (s1.length() - s2.length()); }
});
StringBuilder sb = new StringBuilder();
sb.append(strArr[0]).append('\n');
for(int i = 1; i < strArr.length; i++) {
if(!strArr[i].equals(strArr[i-1]))
sb.append(strArr[i]).append("\n");
}
System.out.println(sb);
}
}