코딩테스트 연습

[백준] 4158 : CD / JAVA, 해시, 맵, 이분탐색

콩콩(๓° ˘ °๓)♡ 2023. 7. 30. 17:22

처음엔 해시맵으로 각각의 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);
		}
	}
}