총 N
개의 문자열로 이루어진 집합 S
가 주어진다.
입력으로 주어지는 M
개의 문자열 중에서 집합 S
에 포함되어 있는 것이 총 몇 개인지 구하는 프로그램을 작성하시오.
첫째 줄에 문자열의 개수 N
과 M (1 ≤ N ≤ 10,000, 1 ≤ M ≤ 10,000)
이 주어진다.
다음 N
개의 줄에는 집합 S
에 포함되어 있는 문자열들이 주어진다.
다음 M
개의 줄에는 검사해야 하는 문자열들이 주어진다.
입력으로 주어지는 문자열은 알파벳 소문자로만 이루어져 있으며, 길이는 500을 넘지 않는다. 집합 S
에 같은 문자열이 여러 번 주어지는 경우는 없다.
첫째 줄에 M
개의 문자열 중에 총 몇 개가 집합 S
에 포함되어 있는지 출력한다.
5 11
baekjoononlinejudge
startlink
codeplus
sundaycoding
codingsh
baekjoon
codeplus
codeminus
startlink
starlink
sundaycoding
codingsh
codinghs
sondaycoding
startrink
icerink
4
-문제를 만든 사람: baekjoon
-데이터를 추가한 사람: djm03178, jaeyoon8783, qwe123rt45, solarmagic, tongnamuu
-문제의 오타를 찾은 사람: Green55
import java.io.*;
import java.util.HashSet;
import java.util.stream.Stream;
public class Code14425 {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String number=br.readLine();
int[] num= Stream.of(number.split(" ")).mapToInt(Integer::parseInt).toArray();
int N=num[0];//N
int M=num[1];//M
HashSet<String> S=new HashSet<String>();
for(int i=0;i<N;i++){
S.add(br.readLine());
}
String[] test=new String[M];
for(int i=0;i<M;i++){
test[i]=br.readLine();
}
br.close();
int count=0;
for(int i=0;i<M;i++){
if(S.contains(test[i])){
count++;
}
}
// BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
// bw.write(count);
// bw.flush();
// bw.close();
System.out.println(count);
}
}
이번에는 해시셋
으로 해보았다. 해시맵은 중복을 허용하지만, 해시셋은 집합이라 중복을 허용하지 않는다. S.contains(test[i])
로 해당 문자열을 집합이 포함하고 있는지를 확인했다!