mo1lusca의 블로그
[백준] 1181 단어 정렬 - Rust 본문
https://www.acmicpc.net/problem/1181
주어진 단어들을 정렬하는 문제이다.
길이가 짧은 것부터 정렬하되, 길이가 같으면 사전순으로 정렬한다.
만약 중복된 단어가 있다면 그 단어는 하나만 출력한다.
use std::io::{self, BufRead, Write};
fn main() {
let mut ilock = io::stdin().lock();
let mut olock = io::stdout().lock();
let mut buf = String::new();
ilock.read_line(&mut buf).expect("error");
let n: usize = buf.trim().parse::<usize>().unwrap();
let mut words: Vec<String> = Vec::new();
for _ in 0..n {
buf.clear();
ilock.read_line(&mut buf).expect("error");
words.push(buf.trim().to_owned());
}
words.sort_by(|a, b| match a.len() == b.len() {
true => a.cmp(b),
false => a.len().cmp(&b.len()),
});
words.dedup();
for i in 0..words.len() {
writeln!(olock, "{}", words[i]).unwrap();
}
}
.sort_by() 메서드는 벡터를 사용자가 정의한 비교함수를 기준으로 정렬한다.
위에서 설명한 정렬 기준으로 정렬해야 하기 때문에
길이가 같다면 .cmp() 메서드를 사용해 사전순 정렬하고, 다르다면 길이순 정렬한다.
그 후, 중복검사를 해야하기 때문에 .dedup() 메서드를 사용한다.
'PS' 카테고리의 다른 글
| [백준] 3986 좋은 단어 - C++ (0) | 2025.06.01 |
|---|---|
| [백준] 9012 괄호 - C++ (1) | 2025.06.01 |
| [백준] 1697 숨바꼭질 - C (0) | 2025.05.18 |
| [백준] 2178 미로 탐색 - C (0) | 2025.05.18 |
| [백준] 24051, 24052 알고리즘 수업 - 삽입 정렬 - C (0) | 2025.05.15 |