자료구조&알고리즘/백준

1764번: 듣보잡 [JAVA]

yong_ღ'ᴗ'ღ 2023. 7. 16. 21:20

https://www.acmicpc.net/problem/1764

 

1764번: 듣보잡

첫째 줄에 듣도 못한 사람의 수 N, 보도 못한 사람의 수 M이 주어진다. 이어서 둘째 줄부터 N개의 줄에 걸쳐 듣도 못한 사람의 이름과, N+2째 줄부터 보도 못한 사람의 이름이 순서대로 주어진다.

www.acmicpc.net

 

문제) 듣도 못한 사람 ∩ 보도 못한 사람

 

접근방식) 

1. HashMap 사용해서 Key 이름, Value에는 언급된 횟수를 넣음

2. HashMap 돌면서 value값 2 이상인 거 names 리스트에 추가

3. 사전순으로 출력해야 하므로, names 리스트 정렬

4. StringBuilder에 list 의 size와 이름들 순서대로 append한 뒤에 출력

 

package codingTestStudy.week1;

import java.io.*;
import java.util.*;
public class B_1764 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        // 듣도 못한 사람 ∩ 보도 못한 사람
        HashMap<String, Integer> map = new HashMap<>();
        for (int i = 0; i < N + M; i++) {
            String name = br.readLine();
            map.put(name, map.getOrDefault(name, 0) + 1);
        }

        // map 돌면서, 개수가 2인 거 찾아서 names 리스트에 추가
        List<String> names = new ArrayList<>();
        for (String key : map.keySet()) {
            if (map.get(key) >= 2)
                names.add(key);
        }

        // 사전순으로 출력 → names 리스트 정렬
        Collections.sort(names);

        // 결과 출력
        StringBuilder sb = new StringBuilder();
        sb.append(names.size()).append('\n');
        for (String name : names)
            sb.append(name).append('\n');
        System.out.print(sb);
    }
}