potatoo 2022. 12. 19. 17:05
728x90

종강 기념해서 이제 하루에 하나씩 백준을 풀어보려고 한다.

오늘은 몸풀기로 아주 쉽고 쉬운 문제를 풀었다.

오늘 푼 문제는 아래의 문제다.

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

 

14425번: 문자열 집합

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

www.acmicpc.net

이게 왜 실버 3인지 잘 모르겠지만 그렇다고 하니까...일단 풀었다.

너무 간단한 문제라서 아마 코드를 짧게 쓰는 사람이 많을 것 같다고 생각한다.

for문을 두번이나 써서 좀 그런것 같아서 다른 사람들은 어떻게 풀었는지도 봤다. 대부분 HashMap이나 HashSet을 써서 나와 비슷하게 풀었다.

 

그래서 내 코드를 보면 먼저 N,M값을 받아오고 for문을 이용해서 집합을 받아오고 그 다음 그걸 포함하고 있는지 확인하는 for문을 하나 더 돌려서 확인하는 방법으로 짰다.

package backjoon;

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

public class b14425 {
    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());
        int M = Integer.parseInt(st.nextToken());

        HashSet<String> arr = new HashSet<>();

        for(int i=0; i<N; i++){
            arr.add(br.readLine());
        }
        int total = 0;
        for(int i=0; i<M; i++){
            if(arr.contains(br.readLine())){
                total++;
            }
        }
        System.out.println(total);
    }
}

너무 간단해서 이 문제는 짧게 끝내겠다.

728x90