본문 바로가기
백준

[백준] 1269번 : 대칭 차집합 – JAVA [자바]

by Hongwoo 2022. 4. 26.
반응형

https://www.acmicpc.net/problem/1269

 

1269번: 대칭 차집합

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

www.acmicpc.net

 


  • 문제

 

 


  • 문제 풀이

백준 1269번 대칭 차집합은 실버 3 난이도의 맵 문제였다. 이 문제에서는 2개의 집합 A, B가 주어진다. 그리고 A-B와 B-A 사이즈의 합을 더하면 된다.

 

이 문제는 HashMap과 ArrayList를 이용해서 풀겠다. 우선 입력받는 수들을 HashMap에 추가한다. HashMap은 <Integer, Integer>로 선언하고 값은 딱히 필요 없어서 0으로 추가한다.

 

그리고 입력받는 수들도 ArrayList에 마찬가지로 추가해준다. 이러하면 HashMap 2개, ArrayList 2개가 될 것이다.

 

그리고 각 ArrayList를 iterate 하면서 HashMap에 그 수가 키로 있으면 제거해준다.

 

문제에서 주어진 예제를 한번 보겠다. 

일단 집합 A = {1, 2, 4}와 B = {2, 3, 4, 5, 6}이 주어졌다. 우선 이 수들을 HashMap에 넣으면 다음과 같다. 추가로 값은 중요하지 않으니 생략했다.

그리고 이 수들을 마찬가지로 ArrayList에 추가해준다.

 

그리고 리스트 A에 있는 수들을 맵 B에서 지워주고 리스트 B에 있는 수들을 A에서 remove() 함수를 이용해서 지워준다. 그러면 다음과 같은 Map을 얻을 수 있다.

 총 4개가 있으니 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));
        br.readLine();
        Map<Integer,Integer> A = new HashMap<>();
        StringTokenizer st = new StringTokenizer(br.readLine());
        List<Integer> A_List = new ArrayList<>();
        List<Integer> B_List = new ArrayList<>();
        while (st.hasMoreTokens()) {
            int num = Integer.parseInt(st.nextToken());
            A.put(num,0);
            A_List.add(num);
        }
        Map<Integer, Integer> B = new HashMap<>();
        st = new StringTokenizer(br.readLine());
        while (st.hasMoreTokens()) {
            int num = Integer.parseInt(st.nextToken());
            B.put(num,0);
            B_List.add(num);
        }
        for (int num : A_List) {
            if (B.containsKey(num)) B.remove(num);
        }
        for (int num : B_List) {
            if (A.containsKey(num)) A.remove(num);
        }
        System.out.print(A.size() + B.size());
    }
}

 


  • 후기

간단한 맵과 리스트를 이용해서 풀 수 있는 실버 난이도의 문제였다.

 

반응형

댓글