본문 바로가기

코딩테스트/백준

백준 : 14단계 집합과 맵 : 1269 대칭 집합 (JAVA)

목차

    JAVA 풀이 1269번 대칭 집합

    https://www.acmicpc.net/problem/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을 넘지 않는다.

    출력

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

    예제 입력 1 복사

    3 5
    1 2 4
    2 3 4 5 6

    예제 출력 1 복사

    4

    풀이

    import java.io.*;
    import java.util.*;
    
    public class Main {
    	public static void main(String[] args) throws IOException {
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		StringTokenizer st = new StringTokenizer(br.readLine());
    		
    		// 원소 배열 (A와 B의 개수)
    		int[] ele = {Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken())};
    		
    		// 대칭 차집합을 계산할 set
    		Set<Integer> list = new HashSet<>();
    		
    		// 집합의 개수만큼 for문
    		for(int i = 0; i < ele.length; i++) {
    			st = new StringTokenizer(br.readLine());
    			
    			// 각 원소의 개수만큼 for문
    			for(int j = 0; j < ele[i]; j++) {
    				// 원소 num
    				int num = Integer.parseInt(st.nextToken());
    				
    				// 이미 있는 원소라면 제거
    				if(list.contains(num)) {
    					list.remove(num);
    				
    				// 없는 원소라면 추가
    				}else {
    					list.add(num);
    				}
    			}
    		}
    		
    		// 대칭 차집합의 원소의 개수 출력
    		System.out.println(list.size());
    	}
    }

     

    if문으로 추가/제거를 했기 때문에 HashSet의 길이를 출력해주면 됩니다.