728x90
https://www.acmicpc.net/problem/1181
첫 번째 줄에 n개의 단어를 나타내는 수가 있습니다.
그 수 만큼 단어가 나옵니다.
정렬의 조건은 두 가지 입니다.
1. 길이가 짧은 순서대로
2. 같은 길이는 사전 순서대로
그렇게 정렬해서 출력해주면 됩니다.
* 여기서 같은 단어는 하나만 출력하면 됩니다.
해설 코드
import java.util.Comparator;
import java.util.HashSet;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
HashSet<String> hs = new HashSet<>();
int n = sc.nextInt();
for (int i=0; i<n; i++){
hs.add(sc.next());
}
hs.stream().sorted()
.sorted(Comparator.comparingInt(String::length))
.forEach(System.out::println);
}
}
해설
1. 입력은 Scanner로 입력 받았습니다.
2. 중복 제거를 위해 HashSet 를 사용했습니다.
1. 첫 번째 줄로 입력되는 n를 받습니다.
2. n만큼 반복하여 HashSet에 만들어 줍니다.
* HashSet은 중복을 허용하지 않기 때문에 add 할 때 부터 중복이 제거 됩니다.
이제 정렬해서 출력만 하면 되겠죠?
1. 중복이 제거된 hs를 스트림으로 만들어 sorted()로 한번 정렬해줍니다.
그러면 사전 순서대로 정렬이 됩니다.
2. 사전 순서대로 정렬이 된 상태에서 다시 정렬을 해주는데, 이 때 compare를 사용해
length를 비교하여 정렬하도록 합니다.
람다로 한다면
3. length로 다시 정렬된 상태에서 forEach()를 통해 출력합니다.
728x90
'알고리즘 with JAVA' 카테고리의 다른 글
가장 짧은 문자의 거리 값 찾는 알고리즘 - 자바 (0) | 2021.06.07 |
---|---|
자바 문자열 뒤집어서 출력하기 (0) | 2021.05.30 |
백준 1427번 소트인사이드 - 자바 (0) | 2021.05.28 |
백준 11719번 그대로 출력하기 2 - 자바 (0) | 2021.05.27 |
11721번 열 개씩 끊어 출력하기 - 자바 (0) | 2021.05.23 |