[BaekJoon] #14425 문자열 집합

현굥·2024년 9월 1일

BaekJoon

목록 보기
21/53



맨날 StringTokenizer만 써서 풀었는데 일반적으로 split를 이용하는 것 같길래 split을 써서 풀어보았다. 흠 뭐가 더 편한지는 모르겠다 !

문제이해

이 문제는 N개의 문자열로 이루어진 집합 S가 주어지고, 그 다음 입력으로 주어지는 M개의 문자열 중에서 집합 S에 포함되어 있는 것이 총 몇개인지 구하는 문제입니다. 앞에서 풀었던 숫자카드 문제의 문자열버전이라고 생각하면 될 것 같습니다.

입력

  • 첫번째 줄에 Set에 넣을 문자열의 갯수 N과 비교할 문자열의 갯수 M이 주어집니다.
  • 그 다음 set에 넣을 N개의 문자열과 비교할 문자열 M개가 주어집니다.

출력

  • M개의 문자열 중에 총 몇개가 Set 안에 포함되어 있는지 출력합니다.

문제접근

  • set안의 문자열이 포함되어 있는지 아닌지 판단하는 문제이므로, 중복과 순서는 고려대상이 아니므로 HashSet을 이용했습니다.

문자열 분리

split 메소드를 사용하여 입력된 문자열을 공백 기준으로 분리하고, 각각 N과 M으로 저장해주었습니다.

문자열 비교

contains 메소드를 사용하여 입력으로 주어지는 M개의 문자열이 set에 포함되어 있는지 확인해주었습니다.

code

  1. BufferedReader + split
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.HashSet;

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader( new InputStreamReader(System.in));
        HashSet<String> set = new HashSet<>();
        String[] arr = br.readLine().split(" ");
        int N = Integer.parseInt(arr[0]);
        int M = Integer.parseInt(arr[1]);
        for(int i=0; i< N; i++){
            set.add(br.readLine());
        }
        int sum = 0;
        for(int j =0; j<M ; j++){
            if(set.contains(br.readLine())){
                sum ++;
            }
        }
        System.out.println(sum);
    }
}
  1. BufferedReader + StringTokenizer 이용

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

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader( new InputStreamReader(System.in));
        HashSet<String> set = new HashSet<>();
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        for(int i=0; i< N; i++){
            set.add(br.readLine());
        }
        int sum = 0;
        for(int j =0; j<M ; j++){
            if(set.contains(br.readLine())){
                sum ++;
            }
        }
        System.out.println(sum);
    }
}

결과창

0개의 댓글