java

백준 14425 문자열 집합 java 자바

MiaCoder 2024. 1. 23. 10:17

이 문제는 해시맵을 사용해서 풀이하면 편리하다.

 

처름에는 N번째 행까지, M번째 행까지 별도의 HashMap에 넣고 직접 비교를 하려고 했으나.

 

containKey라는 좋은 매소드를 활용하면 입력과 동시에 비교를 하고 카운트를 할 수 있는 점을 발견했다.

 

import java.util.StringTokenizer;
import java.util.HashMap;
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());
        // 공백을 통해 입력받기 위해 Stringtokenizer 사용

        int count = 0;
        // 중복되는 값을 카운트

        HashMap<String, Integer> map1 = new HashMap<>();
        //해시맵 선언

        for (int i = 0; i < N; i++) {
            map1.put(br.readLine(), 0);
        }
        //해시맵에 입력값 넣기 

        for (int i = 0; i < M; i++) {
            if (map1.containsKey(br.readLine())) {
                count++;
            }
        }
        // M번째 입력을 받기 시작하면서는 별도의 HashMap에 저장하지 않고
        //바로바로 비교를 통해 count를 하는 것이 좀 더 빠르다.

        System.out.print(count);

        br.close();
    }
}