Notice
Recent Posts
Recent Comments
Link
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

mo1lusca의 블로그

[백준] 1181 단어 정렬 - Rust 본문

PS

[백준] 1181 단어 정렬 - Rust

mo1lusca 2025. 5. 27. 18:28

 

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