https://www.acmicpc.net/problem/1181
문제 분석
분류
- 문자열
- 정렬
문제 설명
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
- 길이가 짧은 것부터
- 길이가 같으면 사전 순으로
단, 중복된 단어는 하나만 남기고 제거해야 한다.
입력
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
출력
조건에 따라 정렬하여 단어들을 출력한다.
소스코드
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
String[] words = new String[N];
for (int i = 0; i < N; i++) {
words[i] = br.readLine();
}
List<String> wordList = Arrays.asList(words);
Collections.sort(wordList);
Collections.sort(wordList, (String a,String b) -> a.length() - b.length());
Stream<String> stream1 = wordList.stream();
stream1 = stream1.distinct();
stream1.forEach(System.out::println);
}
}
문제풀이
- BufferReader 사용해 단어들을 받아 String 형식의 배열에 저장해준다.
- 배열을 List 형식으로 변환해 먼저 한번 sort 해준다. (사전순)
- 사전순으로 정렬된 단어들을 길이순으로 다시 배열해준다 (sort 활용)
- Stream의 distinct 활용해 중복을 제거해준 뒤 출력해준다.
'Koala - 14기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[백준/Python] 5430번 AC (0) | 2024.05.05 |
---|---|
[백준/Python3] 10798번 세로읽기 (0) | 2024.05.05 |
[백준/Python3] 10828번 스택 (0) | 2024.04.15 |
[백준/Python] 16935번 배열 돌리기 (0) | 2024.04.13 |
[백준/Python3] 3985번 롤 케이크 (0) | 2024.04.08 |