[백준] S4 14425번 문자열 집합 (Java)

숙취엔 꿀물.·2023년 11월 21일

백준(Backjoon)

목록 보기
1/15

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

👉문제

실버4 문제인만큼 그리 어려운 문제는 아니였던거 같다. 우선 N개의 문자열을 입력받고, 이후 입력받는 M개의 문자열과 비교하면 해결할 수 있는 간단한 문제이다.

👉풀이

  1. 처음에는 아래 코드처럼 단순히 배열에 넣고 그 이후에 입력받는 문자열과 비교했다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws Exception {

        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());
        String[] S = new String[N];
        int ans = 0;

        for (int i = 0; i < N; i++) {
            S[i] = br.readLine();
        }

        for (int i = 0; i < M; i++) {
            String check = br.readLine();

            for (int j = 0; j < N; j++) {
                if (S[j].equals(check)) ans++;
            }
        }

        System.out.println(ans);
    }
}
  1. 더 빠르게 해결하기 위해 배열이 아닌 Set을 사용하여 입력받는 문자열이 Set에 포함되는지 비교하는 방식으로 풀었다.
		int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        int ans = 0;

        Set<String> set = new HashSet<>();

        // N만큼의 문자열 저장
        for (int i = 0; i < N; i++) {
            set.add(br.readLine());
        }

        // 뒤의 M개의 문자열과 set을 비교
        for (int i = 0; i < M; i++) {
            ans = set.contains(br.readLine()) ? ans+1 : ans;
        }
  1. 혹시 HashSet을 이용하면 더 빨라질까 싶어서 사용해봤는데, 미묘한 차이지만 더 빨리졌다.. 이 부분에 대해서는 나중에 공부해서 차이점을 확인해야 할 것 같다.
		HashSet<String> set = new HashSet<>();

        // N만큼의 문자열 저장
        for (int i = 0; i < N; i++) {
            set.add(br.readLine());
        }

        // 뒤의 M개의 문자열과 set을 비교
        for (int i = 0; i < M; i++) {
            ans = set.contains(br.readLine()) ? ans+1 : ans;
        }

👉성능

위에서 부터 순서대로

채점 번호 : 69546631 - 방법 3
채점 번호 : 69546487 - 방법 2
채점 번호 : 69546205 - 방법 1

확실히.. 로직을 어떻게 구성하느냐에 따라 성능 차이가 조금 난다. 이런걸 느낄 때마다 기본을 다지는게 중요하지 않나 싶달까

profile
단단하게 오래가고자 하는 백엔드 개발자

0개의 댓글