알고리즘/백준

14425번 : 문자열 집합

코딍코딍 2022. 8. 17. 17:08

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

 

14425번: 문자열 집합

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

www.acmicpc.net

 

 

문제

 

 

코드

HashSet 사용 X

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        String []s = new String[n];
        for(int i=0;i<n;i++) {
            s[i] = br.readLine();
        }
        String[] arr = new String[m];
        for(int i=0;i<m;i++) {
            arr[i] = br.readLine();
        }
        int count=0;
        for(int i=0;i<m;i++) {
            for(int j=0;j<n;j++) {
                if(s[j].equals(arr[i])) {
                    count++; break;
                }
            }
        }
        bw.write(count+""); bw.flush();
    }
}

HashSet 사용 O

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        HashSet<String> set = new HashSet();
        for(int i=0;i<n;i++) {
            set.add(br.readLine());
        }
        int count=0;
        for(int i=0;i<m;i++) {
            String s = br.readLine();
            if(!set.add(s)) count++;
            else set.remove(s);
        }
        bw.write(count+""); bw.flush();
    }
}

 

 

해결방법

처음 문제를 풀 땐 Set을 생각하지 못하고 배열로 풀었다. 이 방법도 맞긴 하지만 시간을 타이트하게 준다면 틀렸을 것이다. 두 번째 방법으로 HashSet을 사용하여 풀었는데 훨씬 속도가 빨랐다. 이때 유의할 점은 M개의 문자열 중에 중복되는 문자열이 있을 수 있으므로 M개의 문자열 중에 HashSet에 저장된 문자열은 카운팅 되지 않도록 바로 삭제해줘야 한다.