[백준 1269번] : 대칭 차집합

2022. 6. 22. 15:24알고리즘/백준

728x90

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

 

1269번: 대칭 차집합

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

www.acmicpc.net

map에 대한 내용만 잘 숙지한다면 쉽게 풀 수 있는 문제였다. 

https://ls011031.tistory.com/51

 

[C++][STL] map 사용법 정리

1. map이란? map은 각 노드가 key와 value 쌍으로 이루어진 트리입니다. 특히, 중복은 허용하지 않습니다. 따라서 map은 first, second가 있는 pair 객체로 저장되는데 first-key, second-value로 저장됩니다. c++..

ls011031.tistory.com

#include <iostream>
#include <map>
using namespace std;
map <int, int> m;
int main() {
	int a, b;
	int k;
	int cnt = 0;
	cin >> a >> b;
	for (int i = 0; i < a; i++) {
		cin >> k;
		m[k] = 1;
		cnt++;
	}
	for (int i = 0; i < b; i++) {
		cin >> k;
		if (m[k] == 1) {
			cnt--;
		}
		else
			cnt++;
	}
	cout << cnt;
}

대칭 차집합을 구하는 원리는

전체 원소의 갯수 -( a, b 공집합의 개수)를 해주면 된다.

 

그래서 내가 문제를 푼 방법은

 

먼저 첫번째 a의 수만큼 반복문을 돌려줄 때 m [k]에다가 방문했음을 알린다.

그리고 다음 b의 수만큼 방복문을 돌려줄때 방문했으면 cnt--를 해주고

 방문을 안햇으면 cnt++해주면 된다.

 

map을 사용한 이유는 경우의 수가 최대 40만 개이지만, 원소의 크기의 범위가 1억을 넘어가서 1억 개를 담을 수 있는 배열을 만들 수 없기 때문에 map을 사용했다. 

728x90

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 10815 숫자 카드 ( C++)  (0) 2022.06.30
[백준] 1463 1로 만들기  (0) 2022.06.28
백준 1107 리모컨 C++  (0) 2022.06.09
백준 17478 재귀함수가 뭔가요?  (0) 2022.05.31
백준 17478  (0) 2022.05.31