✅ 오늘의 학습 키워드
- Collections 클래스
- Comparator 인터페이스와 compare 메서드 오버라이드
- 문자열 정렬 (길이 및 사전순)
- TreeSet을 이용한 중복 제거
🔍 오늘의 문제 분석
- 문자열 n개를 1) 문자열 길이가 짧은 순, 2) 길이가 같다면 사전 순으로 정렬
- 단어의 개수 N은 1~20,000, 단어 길이는 50자 이하
- 중복된 단어는 하나만 남기고 제거
✨ 오늘의 회고
📌내가 적은 답안📌
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
Set<String> result = new TreeSet<>();
while (n-- > 0) {
result.add(br.readLine());
}
ArrayList<String> arrayList = new ArrayList<>(result);
Collections.sort(arrayList, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
if (o1.length() == o2.length()) {
return o1.compareTo(o2);
}
return o1.length() - o2.length();
}
});
StringBuilder sb = new StringBuilder();
for (String s : arrayList) {
sb.append(s).append("\n");
}
System.out.print(sb);
오늘 문제는 TreeSet을 이용해서 중복 제거와 정렬을 수행한 뒤, Comparator 인터페이스를 활용해서 정렬 방법을 구현해야 했다. 사전 순으로만 정렬이 필요하다면 TreeSet으로만 가능하지만, 그 결과는 아래 이미지와 같이 문제의 요구사항에 충족하지 못했다.
그래서 커스텀 정렬을 하기 위해서 Collections 클래스의 sort 메서드를 오버라이드하여 정렬 기준을 직접 정의해 주었다.
🔎 Collections 클래스는 Java의 java.util 패키지에 있는 유틸리티 클래스로, 컬렉션을 다루기 위한 다양한 정적 메서드를 제공
Collections.sort 메서드는 두 가지 방식으로 사용할 수 있는데, 파라미터로 list만 전달한 경우 요소의 자연 순서에 따라 정렬이 되고 Comparable 인터페이스를 구현해야 한다. 커스텀 정렬은 Collections.sort(list, comparator)로 Comparator 인터페이스를 직접 정의해서 정렬한다.
public interface Comparator<T> {
int compare(T o1, T o2);
}
Comparator는 인터페이스이기 때문에 직접 사용하지 못하고 compare() 메서드를 재정의해서 구현한다. compare() 메서드는 int 값을 리턴하는데 그 조건은 다음과 같다.
- 반환값이 음수 ▶️ o1이 o2보다 앞에 위치
- 반환값이 0 ▶️ o1과 o2가 같은 위치
- 반환값이 양수 ▶️ o1이 o2보다 뒤에 위치
이 문제에서 문자열 o1의 길이가 o2의 길이보다 짧을 경우 o1이 o2보다 앞에 위치해야 하기 때문에 s1.length() - s2.length()로 반환값이 음수가 되도록 구현했다.
문자열의 길이가 같을 경우, String 클래스에서 이미 구현되어 있는 compareTo 메서드를 사용해서 사전 정렬을 수행하도록 했다.
그 결과, 위 이미지처럼 문제의 요구사항에 맞게 정렬을 구현할 수 있었다. 참고로 람다식으로 구현했을 때 훨씬 간결하고 가독성이 좋은 코드로 만들 수 있다.
Collections.sort(words, (s1, s2) -> {
if (s1.length() != s2.length()) {
return s1.length() - s2.length();
}
return s1.compareTo(s2);
});
'알고리즘 > [항해99] 1일 1알고리즘 스터디' 카테고리의 다른 글
📑주니어 개발자가 면접을 앞두고 준비한 것들 (0) | 2025.04.17 |
---|---|
99클럽 코테 스터디 14일차 TIL ✒️브실이의 입시전략 (0) | 2025.04.17 |
99클럽 코테 스터디 12일차 TIL ✒️임스와 함께하는 미니게임 (0) | 2025.04.16 |
99클럽 코테 스터디 11일차 TIL ✒️Repeated DNA Sequences (0) | 2025.04.14 |
99클럽 코테 스터디 10일차 TIL ✒️ 평행선 (0) | 2025.04.11 |