[백준 JAVA] 1269번 풀이 - 대칭 차집합 (Set)
by mini_minpackage baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;
/**
* 1269 : 대칭 차집합
* 자연수를 원소로 갖는 집합 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이다.
*
* * 입력
* 1. 첫째 줄에는 집합 a의 원소 개수와 집합 b의 원소 개수가 주어진다.
* 2. 둘째 줄에는 집합 a, 셋째 줄에는 집합 b가 주어진다.
*
*/
public class _1269_1 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int a_len = Integer.parseInt(st.nextToken());
int b_len = Integer.parseInt(st.nextToken());
Set<Integer> a_map = new HashSet<>();
Set<Integer> b_map = new HashSet<>();
st = new StringTokenizer(br.readLine());
for ( int i = 0; i < a_len; i++ ) {
int n = Integer.parseInt(st.nextToken());
a_map.add(n);
}
st = new StringTokenizer(br.readLine());
for ( int i = 0; i < b_len; i++ ) {
int n = Integer.parseInt(st.nextToken());
b_map.add(n);
}
int result = 0;
for ( int num : a_map) {
if(! b_map.contains(num)) {
result++;
}
}
for ( int num : b_map) {
if(! a_map.contains(num)) {
result++;
}
}
System.out.println(result);
}
}
풀이
분명 간단한 문제인데 HashMap 과 List 를 사용하면 시간초과가 났다....ㅠㅠ
결국 서치해서 Set 으로 풀면 해결된다고 하여 Set으로 바꿔서 문제 해결... ㅠㅠ
Set은 중복이 불가한, 수정은 가능하며 순서 또한 보장하지 않는 추상자 자료형이다...
보통 집합에 어떤 원소가 포함되는지 체크할 때 사용하는 듯 하다.
문제를 풀면서 정말 오랜만에 Set 을 써본다....!
'매일매일 알고리즘 공부' 카테고리의 다른 글
[백준 JAVA] 2798 번 풀이 - 블랙잭 (1) | 2023.08.27 |
---|---|
[백준 JAVA] 11478번 풀이 - 서로 다른 부분 문자열의 개수 (0) | 2023.08.26 |
[백준 JAVA] 1764번 풀이 - 듣보잡 (0) | 2023.08.22 |
[백준 JAVA] 1620번 풀이 - 나는야 포켓몬 마스터 이다솜 (✨적절한 함수를 만드는 연습!!) (0) | 2023.08.19 |
[백준 JAVA] 7785번 풀이 - 회사에 있는 사람 (0) | 2023.08.16 |
블로그의 정보
개발자 미니민의 개발로그
mini_min