본문 바로가기
백준(Java)/23년 4월

[Java] 백준 - 1269번: 대칭 차집합

by C0MPAS 2023. 4. 13.

4월 13일(목) - 집합과 맵(1269번)

 

1269번: 대칭 차집합

첫째 줄에 집합 A의 원소의 개수와 집합 B의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 A의 모든 원소가, 셋째 줄에는 집합 B의 모든 원소가 빈 칸을 사이에 두고 각각 주어

www.acmicpc.net

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

문제점

set_A.removeAll(set_B);
set_B.removeAll(set_A);
set_A.addAll(set_B);

1. 첫 번째 줄에서 A-B를 구하고, 두 번째 줄에서 B-A를, 마지막 줄에서 A-B와 B-A의 합집합을 구하려했다

-> 하지만 출력값은 4가 아닌 6이 나옴

-> 새로운 집합 tmp에 A를 복사해놓은 뒤, 두 번째 줄에서 B-A를 계산할때 사용했더니 제대로 4가 출력되었다

-> 이유 더 알아봐야함

 

-> 첫 번째 줄에서 A-B를 구하면서 이미 집합 A의 내용은 A-B로 변경되었다

-> 따라서 두 번째 줄에서 B-A를 제대로 구하려면, 온전한 집합 A를 복사해놓은 새로운 집합을 이용해야한다

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

풀이

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.HashSet;
import java.util.StringTokenizer;

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());

        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());

        HashSet<Integer> set_A = new HashSet<>();
        HashSet<Integer> set_B = new HashSet<>();

        st = new StringTokenizer(br.readLine());
        for(int i=0; i<a; i++)
        {
            set_A.add(Integer.parseInt(st.nextToken()));
        }

        st = new StringTokenizer(br.readLine());
        for(int i=0; i<b; i++)
        {
            set_B.add(Integer.parseInt(st.nextToken()));
        }

        HashSet<Integer> tmp = new HashSet<>(set_A);
        set_A.removeAll(set_B);
        set_B.removeAll(tmp);
        set_A.addAll(set_B);

        System.out.println(set_A.size());
    }
}

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

댓글