백준 | 1269번. 대칭 차집합 문제 풀이

728x90

1269번. 대칭 차집합

문제

자연수를 원소로 갖는 공집합이 아닌 두 집합 A와 B가 있다. 이때, 두 집합의 대칭 차집합의 원소의 개수를 출력하는 프로그램을 작성하시오. 두 집합 A와 B가 있을 때, (A-B)와 (B-A)의 합집합을 A와 B의 대칭 차집합이라고 한다.

예를 들어, A = { 1, 2, 4 } 이고, B = { 2, 3, 4, 5, 6 } 라고 할 때,  A-B = { 1 } 이고, B-A = { 3, 5, 6 } 이므로, 대칭 차집합의 원소의 개수는 1 + 3 = 4개이다.

입력

첫째 줄에 집합 A의 원소의 개수와 집합 B의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 A의 모든 원소가, 셋째 줄에는 집합 B의 모든 원소가 빈 칸을 사이에 두고 각각 주어진다. 각 집합의 원소의 개수는 200,000을 넘지 않으며, 모든 원소의 값은 100,000,000을 넘지 않는다.

출력

첫째 줄에 대칭 차집합의 원소의 개수를 출력한다.

내 코드

  • HashMap을 사용하여야 한다.
  • 우선 대칭 차집합은 공집합을 제외한 원소임을 이해해야 한다.
  • HashMap<Int, Int> 형의 맵을 선언하는데, 각 원소에 대한 int Value에는 빈도수를 담을 것이다. 
  • 1) 만약 빈도수가 1이라면 공통원소가 아닌데, 2) 만약 빈도수가 2이면 해당 원소는 공통원소이다.
  • 그러므로 keySet으로 맵 전체를 순회하면서 각 key에 대한 value가 1인 경우만 카운팅하면 교집합을 제외한 대칭차집합 원소의 개수가 카운팅 된다. 그리고 그 answer를 return 하면 정답이 된다.
package to_0422_2;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
/*1269번. 대칭 차집합 
 * */
public class Main {
	//입출력 
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));	
	static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
	//정적변수 선언
	static int aN;
	static int bN; 
	//솔루션 함수 
	public int solution(int[] a, int[] b) {
		int answer = 0;
		HashMap<Integer, Integer> map = new HashMap<>();
		for(int i=0; i<aN; i++) {
			map.put(a[i], map.getOrDefault(a[i], 0)+1);
		}
		for(int i=0; i<bN; i++) {
			map.put(b[i], map.getOrDefault(b[i], 0)+1);
		}
		//==1 인 거 카운팅해서 answer 리턴
		// ** map 의 키 전체 순회 map.keySet() 
		for (Integer key : map.keySet()) {
			if (map.get(key) == 1) {
				answer++;
			}
		}
		return answer;
	}
	
	//실행 메인 
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		Main T = new Main();
		
		String[] arr = br.readLine().split(" ");
		
		aN = Integer.parseInt(arr[0]);
		bN = Integer.parseInt(arr[1]);
		
		int[] a = new int[aN];
		int[] b = new int[bN];
		
		String[] tmp1 = br.readLine().split(" ");
		for(int i=0; i<aN; i++) {
			a[i] = Integer.parseInt(tmp1[i]);
		}
			
		String[] tmp2 = br.readLine().split(" ");
		for(int i=0; i<bN; i++) {
			b[i] = Integer.parseInt(tmp2[i]);
		}
		
		System.out.println(T.solution(a, b));

	}
}

728x90