728x90
문제
접근 방식
입력받은 문자열들 중에서 중복을 제외하고
문자열의 길이가 같지 않다면 짧은 것을 우선 정렬하고
같다면 사전순으로 정렬해줘야 한다.
입력받은 배열을 위의 정렬 기준으로 정렬한 후에
중복이 아닌 경우만 출력해 주거나
Set을 이용해 애초에 중복을 허용하지 않고 저장하여
정렬한 후에 출력해 주는 방법이 있는데 Set을 사용해서 풀었다.
HashSet을 이용해서 중복 없이 입력받은 후에 정렬을 해주거나
TreeSet을 이용해서 순서를 유지해 가며 입력을 받을 수 있다.
첫 번째 코드가 HashSet을 이용한 방법이고
두 번째 코드가 TreeSet을 이용한 방법이다.
풀이
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
Set<String> set = new HashSet<>();
for (int i = 0; i < n; i++) set.add(br.readLine());
List<String> result = set.stream().sorted(Comparator.comparingInt(String::length).thenComparing(o -> o)).collect(Collectors.toList());
for (String s : result) sb.append(s).append("\n");
System.out.println(sb);
}
}
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
Set<String> set = new TreeSet<>(Comparator.comparingInt(String::length).thenComparing(o -> o));
for (int i = 0; i < n; i++) set.add(br.readLine());
for (String s : set) sb.append(s).append("\n");
System.out.println(sb);
}
}
'Java > Algorithms' 카테고리의 다른 글
[백준] 7795번 : 먹을 것인가 먹힐 것인가 (1) | 2023.11.16 |
---|---|
[백준] 2910번 : 빈도 정렬 (1) | 2023.11.16 |
[백준] 5648번 : 역원소 정렬 (0) | 2023.11.16 |
[백준] 11652번 : 카드 (1) | 2023.11.16 |
[백준] 1431번 : 시리얼 번호 (1) | 2023.11.16 |