코딩가딩가

[JAVA]BOJ 14425, 문자열 집합

Noooodle 2024. 7. 28. 23:11

입력은.. 주어진대로 받으면 되고, 집합 S에 문자열들이 있는지 확인할때 이진탐색을 쓰면 된다. 주의사항은 이진탐색은 정렬된 상태에서 가능한 탐색방법이므로, 정렬 후 이진탐색을 하면 된다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N, M, i, cnt = 0;
        String str;
        StringTokenizer st;

        str = br.readLine();
        st = new StringTokenizer(str);
        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());

        // 문자열 집합 S입력받기
        String[] S = new String[N];
        for (i = 0; i < N; i++) {
            S[i] = br.readLine();
        }

        // S 정렬하기
        Arrays.sort(S);

        // 검사할 문자열 배열 입력받기
        String[] strArr = new String[M];
        for (i = 0; i < M; i++) {
            strArr[i] = br.readLine();
        }

        // S에 문자열 있는지 찾기 -> 이진탐색으로
        for(i=0;i<M;i++){
            if(Arrays.binarySearch(S, strArr[i]) >= 0){
                cnt++;}
        }
        System.out.println(cnt+"");
    }
}

너무 졸려가지구.. 자세히 못쓰겠다..

'코딩가딩가' 카테고리의 다른 글

[JAVA]BOJ 2470, 두 용액  (0) 2024.07.31
[JAVA]BOJ 2295, 세 수의 합  (0) 2024.07.29
[JAVA]BOJ 11660, 구간 합 구하기 5  (0) 2024.07.28
[JAVA]BOJ 1931, 회의실 배정  (0) 2024.07.28
[JAVA]BOJ 2910, 빈도 정렬  (0) 2024.07.27