문제 해석
- 이 문제는 두개의 집합(A, B)의 대칭 차집합을 구하면 되는 문제이다.
- A의 집합 요소에 1, 2, 4이 있다고 가정하고, B의 집합 요소에 2, 3, 4, 5, 6이 있다고 가정하면 두개의 공통된 교집합 요소는 2, 4이 된다.
- 즉 차집합이랑 각 집합의 요소에 교집합을 빼는 게 차집합이므로, A-B(차집합)은 요소 1이 남으니 요소의 개수가 1개 이고, B-A(차집합)은 요소 3, 5, 6이 남으니 요소그이 개수가 3이 된다.
- 대칭 차집합이란 이 각각의 차집합의 요소의 개수를 더한 것을 의미한다.
- 다시 말해 (A-B) + (B-A) = 1 + 3 = 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));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
HashSet<Integer> Elements = new HashSet<Integer>();
st = new StringTokenizer(br.readLine());
for(int i = 0; i < A; i++) {
Elements.add(Integer.parseInt(st.nextToken()));
}
st = new StringTokenizer(br.readLine());
for(int i = 0; i < B; i++) {
Elements.add(Integer.parseInt(st.nextToken()));
}
br.close();
bw.write((Elements.size() - B) + (Elements.size() - A) + "");
bw.flush();
bw.close();
}
}
결과
느낀 점
- 집합의 교집합과 차집합을 잘 이용하고, HashSet을 잘 이용한다면 크게 어려운 문제는 아닌 것 같다.
- 물론 시간적인 문제와 메모리 관련된 문제는 (많이 소요...) 앞으로 계속 해결해야할 숙제같다...😢😢