백준 알고리즘
[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);
}
}