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