백준 1764 - 듣보잡 [Rust]

[Silver IV] 듣보잡 - 1764

Posted by Hebi on April 3, 2023

백준 알고리즘

[Silver IV] 듣보잡 - 1764

문제 링크

성능 요약

메모리: 21368 KB, 시간: 404 ms

분류

자료 구조, 문자열, 정렬, 해시를 사용한 집합과 맵

문제 설명

김진영이 듣도 못한 사람의 명단과, 보도 못한 사람의 명단이 주어질 때, 듣도 보도 못한 사람의 명단을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다. 이름은 띄어쓰기 없이 알파벳 소문자로만 이루어지며, 그 길이는 20 이하이다. N, M은 500,000 이하의 자연수이다.

듣도 못한 사람의 명단에는 중복되는 이름이 없으며, 보도 못한 사람의 명단도 마찬가지이다.

출력

듣보잡의 수와 그 명단을 사전순으로 출력한다.

Code

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
use std::collections::HashMap;
use std::vec::Vec;

fn main() {
    let mut ma: HashMap<String, i32> = HashMap::new();
    let mut vt: Vec<String> = Vec::new();

    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("read error");
    let nm: Vec<usize> = input.trim().split(' ').map(|x| x.parse().unwrap()).collect();

    for _ in 0..nm[0]+nm[1] {
        let mut str = String::new();
        std::io::stdin().read_line(&mut str).expect("read error");
        let name = str.trim().to_string();
        let count = ma.entry(name.clone()).or_insert(0);
        *count += 1;

        if *count > 1 {
            vt.push(name);
        }
    }

    vt.sort();

    println!("{}", vt.len());
    for name in vt {
        println!("{}", name);
    }
}