백준 9250번, 문자열 집합 성공(with.Java)
백준 9250번, 문자열 집합 성공(with.Java)에 대하여 알아본 글입니다.
코딩 테스트 문제를 풀며, 풀었던 문제에 대한 회고와 다른 풀이 방법을 알아보며, 알아가고자 합니다.
문제에 대해 먼저 알아보겠습니다.
문제
총 N개의 문자열로 이루어진 집합 S가 주어진다.
입력으로 주어지는 M개의 문자열 중에서 집합 S에 포함되어 있는 것이 총 몇 개인지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 문자열의 개수 N과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)이 주어진다.
다음 N개의 줄에는 집합 S에 포함되어 있는 문자열들이 주어진다.
다음 M개의 줄에는 검사해야 하는 문자열들이 주어진다.
입력으로 주어지는 문자열은 알파벳 소문자로만 이루어져 있으며, 길이는 500을 넘지 않는다.
합 S에 같은 문자열이 여러 번 주어지는 경우는 없다.
출력
첫째 줄에 M개의 문자열 중에 총 몇 개가 집합 S에 포함되어 있는지 출력한다.
문제 풀이
import java.util.*;
import java.io.*;
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.valueOf(st.nextToken());
int M = Integer.valueOf(st.nextToken());
HashSet<String> set = new HashSet<>();
int count = 0;
for(int i = 0; i < N; i++){
set.add(br.readLine());
}
for(int i = 0; i < M; i++){
String str = br.readLine();
if(set.contains(str)){
count++;
}
}
System.out.print(count);
}
}
풀이 설명
이 코드는 두 개의 리스트에서 공통으로 존재하는 문자열의 개수를 찾는 프로그램입니다.
입력으로 주어지는 두 개의 리스트에서 중복되는 요소가 몇 개 있는지 계산하여 출력합니다.
먼저 BufferedReader와 StringTokenizer를 사용해 입력을 처리합니다.
첫 번째 줄에서 두 리스트의 크기인 N과 M을 입력받습니다.
그 다음 HashSet을 생성하여, 첫 번째 리스트의 요소들을 저장합니다.
HashSet은 중복을 허용하지 않으므로, 이 과정에서 중복된 요소는 자동으로 제거됩니다.
두 번째 리스트의 각 요소를 읽어오면서, 그 요소가 HashSet에 존재하는지 확인합니다.
존재하면 count를 증가시켜 중복된 요소의 수를 셉니다.
모든 비교가 끝나면 count를 출력하여, 두 리스트에서 공통으로 존재하는 문자열의 개수를 결과로 보여줍니다.
이 방법은 효율적이며, 두 리스트의 크기가 커도 빠르게 중복 요소를 확인할 수 있습니다.