728x90
코드 힌트
- 입력 처리:
- 입력 스트림을 설정하여 테스트 케이스의 수를 읽습니다.
- 각 문자열을 읽어서 중복되지 않도록 저장할 자료구조를 사용합니다.
- 중복 제거:
- 중복된 항목이 허용되지 않는 자료구조를 사용하여 입력된 문자열을 저장합니다. 이 자료구조는 자동으로 중복된 항목을 제거합니다.
- 정렬 준비:
- 저장된 문자열을 정렬하기 위해 리스트로 변환합니다.
- 정렬 기준 설정:
- 문자열을 길이로 우선 정렬하며, 길이가 같을 경우에는 사전순으로 정렬합니다. 두 가지 기준을 사용하여 정렬을 수행합니다.
- 출력:
- 정렬된 리스트의 각 문자열을 출력 스트림을 통해 출력합니다. 출력이 완료된 후 스트림을 닫아 모든 데이터가 제대로 출력되도록 합니다.
정답은 더보기 클릭
더보기
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
// BufferedReader와 BufferedWriter를 사용해 입출력 처리
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// 입력받은 테스트 케이스의 수를 읽음
int n = Integer.parseInt(br.readLine());
// 중복을 허용하지 않는 Set을 사용하여 고유한 문자열 저장
Set<String> set = new HashSet<>();
// 문자열을 읽어 Set에 추가 (중복된 문자열은 자동으로 제거됨)
for (int i = 0; i < n; i++) {
set.add(br.readLine());
}
// Set의 내용을 리스트로 변환하여 정렬을 준비
List<String> list = new ArrayList<>(set);
// 문자열을 길이 기준으로 오름차순 정렬, 길이가 같을 경우 사전순 정렬
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
int lengthCompare = Integer.compare(s1.length(), s2.length());
if (lengthCompare != 0) {
return lengthCompare; // 길이로 비교
}
return s1.compareTo(s2); // 길이가 같으면 사전순으로 비교
}
});
// 정렬된 문자열을 출력
for (String s : list) {
bw.write(s + "\n");
}
// BufferedWriter의 남은 데이터를 출력
bw.flush();
bw.close();
}
}
728x90
'백준' 카테고리의 다른 글
[백준] 최소공배수 (1934번) (0) | 2024.08.26 |
---|---|
[백준] 카드2 (2164번) (0) | 2024.08.26 |
[백준] 나이순 정렬 (10814번) (0) | 2024.08.17 |
[백준] 터렛 (1002번) (0) | 2024.08.16 |
[백준] 스택 10828번 (0) | 2024.08.15 |