java

백준 1764 듣보잡 자바 java

MiaCoder 2024. 1. 24. 10:40

 

문제를 읽어본 처음 N. M을 입력받는데 반해 N번째 까지 듣도 못한사람, N + 2번째까지 보도 못한사람을 입력받으라고해

 

혼란이 있었다. 하지만 이 의미는 결국 첫 번째 줄은 N, M을 입력받으므로 N번만큼 듣도 못한사람을, 이후 M번 보도 못한사람을

 

입력받으라는 의미였다. 왜 이렇게 쓴건지는 잘 모르겠다.

 

듣도 못한사람, 보도못한사람 2가지 조건을 충족해야하기에, 입력받을 때 마다 value를  + 1 하는 방법을 선택했다.

 

즉 듣도 보도 못한사람은 value값이 2일 것이다.

 

듣도 보도 못한사람이 몇 명인지도 출력해야 하므로 보도 못한사람을 입력받을 때 count에 몇명인지 저장한다.

 

TreeMap를 사용하여 사전순으로 정렬한다. 

 

for-each문과 keySet를 적절히 사용하여 듣도 보도 못한 사람을 출력한다.

 

import java.util.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws Exception {

        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());
        // 보도 못한사람
        
        Map<String, Integer> map = new HashMap<>();
        int count = 0;
        // 듣도 보도 못한사람이 몇 명인지 저장

        for (int i = 0; i < N; i++) {
            String see = br.readLine();
            if (map.get(see) == null) {
                map.put(see, 1);
            }
            // 처음 입력받는 값에 value를 1로 저장한다.
        }

        for (int i = 0; i < M; i++) {
            String hear = br.readLine();
            if (map.get(hear) == null) {
                map.put(hear, 1);
                // 처음 입력받는 값이라면 value에 1을
                
            } else {
                map.put(hear, map.get(hear) + 1);
                // 그 이상으로 입력 받는다면, value에 + 1을 한 값을 저장한다.
                
            }
            if (map.get(hear) == 2) {
                count++;
                // value가 2일 경우 count++를 통해 몇 명인지 센다.
            }
        }

        System.out.println(count);

        TreeMap<String, Integer> rMap = new TreeMap<>();
        rMap.putAll(map);
        // TreeMap를 이용해 사전순으로 정렬한다. 기본정렬은 오름차순이다.
        // TreeMap인 rMap에 기존 map값을 넣음으로서 사전순으로 정렬된다.

        Set<String> keySet = rMap.keySet();
        // for-each문에 사용하기 위해 keySet를 저장

        for (String key : keySet) {
            if (rMap.get(key) == 2) {
                System.out.println(key);
            }
            //value값이 2인 경우에만 key값을 출력
        }

        br.close();

    }

}