문제
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
- 길이가 짧은 것부터
- 길이가 같으면 사전 순으로
단, 중복된 단어는 하나만 남기고 제거해야 한다.
입력
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
정답
- 중복 제거를 위해 HashSet으로 input 받음
- sort() 함수 사용을 위해 ArrayList 객체 생성하면서 HashSet 넣어줌
- compare() 함수를 직접 구현하기 위해 StrComparator 클래스에 인터페이스 Comparator 구현
- compare() 함수를 길이로 비교하도록 구현
- 처음엔 기본 compare() 함수를 사용하여 String을 정렬하고,
- 정렬된 ArrayList에 구현한 compare() 함수를 사용하여 길이 순으로 재정렬함
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Set<String> set = new HashSet<>();
while(n>0) {
set.add(sc.next());
n--;
}
List<String> str = new ArrayList<>(set);
Collections.sort(str);
Collections.sort(str, new StrComparator());
for (int i=0; i<str.size(); i++) {
System.out.println(str.get(i));
}
}
}
class StrComparator implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
if (o1.length() < o2.length()) {
return -1;
} else if (o1.length() > o2.length()){
return 1;
}
return 0;
}
}
링크
'취업 > 코딩테스트' 카테고리의 다른 글
| 프로그래머스 유연근무제 (0) | 2025.04.22 |
|---|---|
| 프로그래머스 택배 상자 꺼내기 (0) | 2025.03.27 |
| [미완]프로그래머스 [PCCP 기출문제] 1번/붕대감기 (0) | 2024.05.28 |
| 프로그래머스 가장 가까운 같은 글자 (3) | 2024.05.24 |
| 코딩테스트 준비 문법 정리 (2) | 2024.05.17 |