백준 14425 문자열 집합 [JAVA]

Ga0·2023년 5월 9일
0

baekjoon

목록 보기
44/125

문제 해석

  • 이 문제는 N개의 문자열과 M개의 문자열이 주어지는데, N은 집합 S의 개수이고, M은 비교할 대상의 문자열들이다.
  • 쉽게 말하면, M개의 문자열이 주어지는데 집합 S의 문자열(개수 : N개)에 M개의 문자열이 몇개 속하는지 개수를 구하면 되는 것!
  • 예시를 들면 아래와 같다.

코드

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

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader  br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N =Integer.parseInt(st.nextToken()); //집합 S의 개수
        int M =Integer.parseInt(st.nextToken()); //비교할 대상의 문자열 개수

        //집합 S 문자열들의 중복을 제거 해당 집합 S에 같은 값이 있으면 집합에 하나로 속하는 것으로 해야함
        Set<String> array = new HashSet<>();

        for(int i = 0; i < N; i++) {
            array.add(br.readLine()); //중복 제거해서 넣고
        }
        
        int count = 0; //집합 S의 문자열에 비교할 대상의 문자열이 몇개가 속하는지 저장하는 변수
        
        for(int i = 0; i < M; i++) {
            String str = br.readLine();

            if(array.contains(str)) { //비교할 대상의 문자열이 해당 HashSet 안에 집합 S에 있는 문자열에 포함된다면
                count++; //집합에 속하기 때문에 count를 한다. => 중복을 제거했기 때문에 그냥 증가시켜도 됨.
            }
        }
        br.close();
        
        System.out.println(count);
    }
}

  • 코드에 대한 설명은 주석으로 달아두었다.
  • HashSet만 사용하면, 간단히 풀리는 문제이다.

결과

느낀 점

  • 처음에 이 문제를 접했을 때 문제 해석에 어려움이 있었다.
  • 문제를 제대로 안 읽어서 어려웠는데, 집합 S가 앞부분인지 뒷부분인지 몰라서 헤맸다...
  • 알고보면(이해하면) 꽤 간단히 풀리는 문제여서 어려움은 없었다.

0개의 댓글