728x90
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
설계
- 주어진 단어들을 길이가 짧은 순으로, 길이가 같을 경우 사전 순으로 정렬
- 주어진 단어들을 HashSet을 사용하여 중복을 제거한 뒤, 배열로 변환
- 그 후, Arrays.sort 메소드와 람다식을 사용하여 단어들을 길이 순으로 정렬
- 길이가 같은 경우에는 사전 순으로 정렬
- 정렬된 단어들은 반복문을 통해 출력
구현
코드
자바(Java)
// package boj1181;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 사용자로부터 단어의 개수 N을 입력받음
int N = sc.nextInt();
// 중복 단어 제거를 위한 HashSet 생성
Set<String> set = new HashSet<>();
for (int i = 0; i < N; i++) {
// 단어를 하나씩 입력받아 Set에 추가
set.add(sc.next());
}
sc.close(); // Scanner 종료
// System.out.println(set);
// Set을 배열로 변환
String[] arr = new String[set.size()];
set.toArray(arr);
// 배열을 정렬
Arrays.sort(arr, (a, b) -> {
if (a.length() == b.length()) {
// 길이가 같을 경우 사전 순으로 정렬
return a.compareTo(b);
} else {
// 길이에 따라 정렬
return a.length() - b.length();
}
});
// 정렬된 단어 출력
for (String s : arr) {
System.out.println(s);
}
}
}
파이썬 (Python)
# 사용자로부터 단어의 개수 N을 입력받음
N = int(input())
# 중복을 제거하기 위해 Set 자료구조 사용
# N개의 단어를 입력받아 Set에 저장
_set = set([input() for _ in range(N)])
# print(_set)
# Set을 리스트로 변환하고 정렬
# 먼저 단어의 길이에 따라 정렬하고, 길이가 같으면 사전 순으로 정렬
_list = sorted(list(_set), key=lambda x: (len(x), x))
print(*_list, sep='\n') # 정렬된 리스트를 줄바꿈으로 구분하여 출력
'Problem_Solving' 카테고리의 다른 글
프로그래머스 : 짝지어 제거하기 (자바, 파이썬) (1) | 2024.01.22 |
---|---|
백준(BOJ) 1157 : 단어 공부 (자바, 파이썬) (0) | 2024.01.21 |
백준(BOJ) 11650 : 좌표 정렬하기 (자바, 파이썬) (0) | 2024.01.19 |
백준(BOJ) 10814 : 나이순 정렬 (자바, 파이썬) (0) | 2024.01.18 |
백준(BOJ) 1654 : 랜선 자르기 (자바, 파이썬) (0) | 2024.01.17 |