처음엔 해시맵으로 각각의 CD목록을 만들고 교집합의 길이를 답으로 제출하게 했다.
하지만 왜인지 16%쯤에 틀렸다고 나온다...
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;
public class easy3_0729 {
public static void main(String[] args) throws NumberFormatException,IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
String a = st.nextToken();
int N = Integer.parseInt(a);
String b = st.nextToken();
int M = Integer.parseInt(b);
int[] Sang = new int[N];
int[] Sun = new int[M];
for (int i = 0; i < N; i++) {
Sang[i]= Integer.parseInt(br.readLine());
}
for (int i = 0; i < M; i++) {
Sun[i]= Integer.parseInt(br.readLine());
}
String fin = br.readLine();
Map<Integer, Integer> mapSang = new HashMap<>();
Map<Integer, Integer> mapSun = new HashMap<>();
int defaultV = 0;
for(int num : Sang) {
mapSang.put(num, mapSang.getOrDefault(num, defaultV)+1);
// gerOrDefault로 defaultdict을 구현할 수 있다.
}
for(int num : Sun) {
mapSun.put(num, mapSun.getOrDefault(num, defaultV)+1);
}
Set<Integer> keySet1 = mapSang.keySet();
// for(Integer key : keySet1) {
// System.out.println(key +" : "+mapSang.get(key));
// }
Set<Integer> keySet2 = mapSun.keySet();
// for(Integer key : keySet2) {
// System.out.println(key +" : "+mapSun.get(key));
// }
HashSet<Integer> intersection = new HashSet<>(keySet1);
intersection.retainAll(keySet2);
// for(Integer key : intersection) {
// System.out.println(key);
// }
System.out.println(intersection.size());
}
}
해시셋으로 상근이의 CD를 받고 선희의 CD와 겹치면 정답 count에 +1 했더니 통과!
public class easy3_0729 {
static int n;
static int m;
static HashSet<Integer> set;
static int count;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (true) {
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
if (n == 0 && m == 0)
break;
set = new HashSet<>();
count = 0;
for (int i = 0; i < n; i++) {
set.add(Integer.parseInt(br.readLine()));
}
for (int i = 0; i < n; i++) {
int cd = Integer.parseInt(br.readLine());
if (set.contains(cd)) // .contains 메소드로 set이 특정 요소를 갖고있는지 알 수 있다.
count++;
}
System.out.println(count);
}
}
}
'코딩테스트 연습' 카테고리의 다른 글
[Java] 백준 9465 스티커 / DP 쉬운 예제 (1) | 2024.02.07 |
---|---|
[백준]11650 : 좌표 정렬하기 / JAVA, compareTo (0) | 2023.07.30 |
[백준] 15721 : 번데기 / JAVA, 브루트포스, 구현 (0) | 2023.07.30 |
[programmers] 프로세스 / 큐 (0) | 2023.04.29 |
[programmers] 기능개발 / 큐 (0) | 2023.04.29 |