본문 바로가기
공부 정리/백준

[백준] 자바 1269 대칭 차집합

by 경적필패. 2021. 7. 14.
반응형

문제

자연수를 원소로 갖는 공집합이 아닌 두 집합 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을 넘지 않는다.

출력

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


테스트 케이스

 

초록색 입력 / 검은색 출력

 


접근

두개의 수를 받는데, 첫 번째 수는 2번째 행값의 개수, 두 번째 수는 3번째 행값의 개수를 의미합니다.

문제가 요구하는 출력값은 대칭 차집합으로 두 개행의 합을 합친 다음 중복된 값을 빼면 대칭 차집합 원소의 개수가 나오게 됩니다.

 

예를 들어서

A집합에 1,2,3이 있고

B집합에 3,4,5가 있다고 할 때,

대칭 차집합은 1,2,4,5입니다.

대칭 차집합 사이즈를 구하는 문제 이르고 A 사이즈(3) + B 사이즈(3) -중복 값(3) 개수*2 = 4

이런 식으로 구현하니 문제가 해결되었습니다.

 

중복을 검사하기 위해서 hashset을 이용하여 contains를 사용하였을 때 이미 값이 있다면 count값을 올려서 중복의 개수를 계산했습니다.


코드

import java.awt.desktop.SystemEventListener;
import java.io.*;
import java.math.*;
import java.util.*;

public class Main {

	/*
 	 1269 problem
	*/
	public static void main(String[] args) throws NumberFormatException, IOException {
		// TODO Auto-generated method stub
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		HashSet<Integer> hs = new HashSet<>();
		
		//2번째행 사이즈 3번째행 사이즈 입력
		StringTokenizer st = new StringTokenizer(br.readLine());
		int aNum = Integer.parseInt(st.nextToken());
		int bNum = Integer.parseInt(st.nextToken());
		int size = 0;
		int count = 0;
		
		//2번째행 값 받기
		StringTokenizer a = new StringTokenizer(br.readLine());
		for(int i=0; i<aNum; i++) {
			hs.add(Integer.parseInt(a.nextToken()));
		}
		
		//3번째행 값 받기
		StringTokenizer b = new StringTokenizer(br.readLine());
		for(int i=0; i<bNum; i++) {
			int value = Integer.parseInt(b.nextToken());
			if(hs.contains(value)) {
				count++;
			}
			else {
			hs.add(value);
			}
		}
		//a행 + b행 개수 -중복되는 값들
		bw.write(String.valueOf(aNum+bNum-count*2));
		bw.flush();
		bw.close();
	}
	
}

주의

 

x

반응형

댓글