목차
JAVA 풀이 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의 길이를 출력해주면 됩니다.
'코딩테스트 > 백준' 카테고리의 다른 글
백준 : 5635번 생일 (JAVA) (2) | 2023.11.21 |
---|---|
백준 : 10845번 큐 (JAVA) (0) | 2023.11.16 |
백준 : 2755번 이번 학기 평점은 몇 점? (JAVA) (2) | 2023.11.11 |
백준 : 13223번 소금 폭탄 (JAVA) (0) | 2023.11.08 |
백준 : 14단계 집합과 맵 : 14425 문자열 집합 (JAVA) (0) | 2023.08.19 |