[백준] 14425 문자열 집합 - 구현, 문자열

jckim22·2023년 8월 8일
0

[ALGORITHM] STUDY (PS)

목록 보기
72/86

난이도

Silver 3

풀이 참고 유무

x

막힌 부분

x

문제

문제 바로가기
총 N개의 문자열로 이루어진 집합 S가 주어진다.

입력으로 주어지는 M개의 문자열 중에서 집합 S에 포함되어 있는 것이 총 몇 개인지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다.
다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다.
다음 M개의 줄에는 검사해야 하는 문자열들이 주어진다.
입력으로 주어지는 문자열은 알파벳 소문자로만 이루어져 있으며, 길이는 500을 넘지 않는다. 집합 S에 같은 문자열이 여러 번 주어지는 경우는 없다.

출력

첫째 줄에 M개의 문자열 중에 총 몇 개가 집합 S에 포함되어 있는지 출력한다.

예제 입력

5 11
baekjoononlinejudge
startlink
codeplus
sundaycoding
codingsh
baekjoon
codeplus
codeminus
startlink
starlink
sundaycoding
codingsh
codinghs
sondaycoding
startrink
icerink

예제 출력

4

문제 검토

간단한 구현 문제로 보인다.

풀이(python)

Python

from sys import stdin
from collections import defaultdict
input=stdin.readline
n,m=map(int,input().split())
s=set()
for _ in range(n):
    s.add(input().strip())
cnt=0
for x in range(m):
    tmp=input().strip()
    if tmp in s:
        cnt+=1
print(cnt)

Java

import java.util.*;
import java.io.*;
public class Main{
    static int n,m;
    //String 배열 선언
    static int cnt=0;
    //key=String, value=Integer를 받는 hashmap 생성
    static Map<String,Integer> hs;
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        n=sc.nextInt();
        m=sc.nextInt();
        sc.nextLine();
        hs=new HashMap<>();
        for(int i=0; i<n; i++){
            hs.put(sc.nextLine(),0);
        }
        for(int j=0; j<m; j++){
            String tmp=sc.nextLine();
            if(hs.containsKey(tmp)){
                cnt+=1;
            }
        }
        System.out.println(cnt);
    }
}

아이디어

HashMap, python 에서는 dictiionary, HashSet python에서는 set, 은 hashable한 자료구조 이므로 탐색을 할 때 O(1)의 수행시간이 걸리기 때문에 python에서는 in, java에서는 hashMap이라면 contaionsKey, HashSet이라면 contains으로 빠르게 탐색한다.

걸린 시간

08:32 - 파이썬 풀이 기준

총평

어렵지 않은 문제이다.
자바에서 contaionsKey, contains 등등 탐색에 용이한 함수들이 있다는 것을 알아두자

profile
개발/보안

0개의 댓글