컴퓨터 과학/자료구조, 알고리즘
[Rust로 백준 하루 하나] 13-9. 단어 정렬
sans2
2024. 9. 28. 09:53
문제 (1181번)
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
- 길이가 짧은 것부터
- 길이가 같으면 사전 순으로
단, 중복된 단어는 하나만 남기고 제거해야 한다.
입력
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
출력
조건에 따라 정렬하여 단어들을 출력한다.
풀이
코드
use std::io;
fn main() {
let mut n = String::new();
io::stdin().read_line(&mut n).unwrap();
let n = n.trim().parse::<i32>().unwrap();
let mut input = String::new();
for _ in 0..n {
io::stdin().read_line(&mut input).unwrap();
}
let mut words: Vec<&str> = input
.split_whitespace()
.collect();
words.sort_by(|a, b| {
if a.len() == b.len() {
a.cmp(&b)
} else {
a.len().cmp(&b.len())
}
});
words.dedup();
for item in &words {
println!("{}", item);
}
}
해설
sort / sort_by / sort_by_key
차이
https://codechacha.com/ko/rust-sort-array/#google_vignette
cmp
시그니처
추가 학습
- 왜
a.cmp(&b)
에는b
여도 돌아가는데a.len().cmp(&b.len())
에서는&b
가 아닌b
이면 돌아가지 않을까?