반응형
https://www.acmicpc.net/problem/1269
- 문제
- 문제 풀이
백준 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());
}
}
- 후기
간단한 맵과 리스트를 이용해서 풀 수 있는 실버 난이도의 문제였다.
반응형
'백준' 카테고리의 다른 글
[백준] 9375번 : 패션왕 신해빈 – JAVA [자바] (0) | 2022.04.26 |
---|---|
[백준] 4358번 : 생태학 – JAVA [자바] (0) | 2022.04.26 |
[백준] 14425번 : 문자열 집합 – JAVA [자바] (1) | 2022.04.26 |
[백준] 2444번 : 별 찍기 - 7 – JAVA [자바] (0) | 2022.04.23 |
[백준] 14607번 : 피자 (Large) – JAVA [자바] (0) | 2022.04.22 |
댓글