[Baekjoon] 14425번: 문자열 집합 - Java

2023. 3. 4. 15:15Computer Sciences/Problem Solve

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

 

14425번: 문자열 집합

첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다.  다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다. 다음 M개의 줄에는 검사해야 하는 문자열들이 주어

www.acmicpc.net

문제 설명

N개의 문자열 집합 S가 주어진다. 그 다음 M개의 문자열이 입력되는데 이 중 집합 S에 포함된 문자열의 개수를 출력하면 된다.

풀이 방법

이렇게 중복체크하는 문제는 Set 자료구조를 활용하면 쉽게 해결할 수 있다. Set의 특징은 요소의 순서가 없으며 중복이 없다. 자바에서 제공하는 Set 중 가장 많이 사용되는 HashSet은 요소 접근에 대해 O(1)의 속도를 가진다. 따라서 이런 문제에 아주 효율적으로 사용할 수 있다.

코드가 길지 않으므로 전체 코드를 바로 본다.

package baekjoon.set;

import java.io.*;
import java.util.*;

public class BOJ14425 {

    static int N, M;
    static Set<String> set = new HashSet<String>();

    public static void main(String[] args) throws IOException {
        try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
            String[] split = br.readLine().split(" ");
            N = Integer.parseInt(split[0]);
            M = Integer.parseInt(split[1]);

            for (int i = 0; i < N; i++)
                set.add(br.readLine());

            int ans = 0;
            for (int i = 0; i < M; i++)
                if (set.contains(br.readLine()))
                    ans++;

            System.out.println(ans);
        }
    }
}