알고리즘/문제 풀이

백준 1269 - 대칭 차집합

qqlzzb 2022. 6. 7. 22:27

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

 

1269번: 대칭 차집합

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

www.acmicpc.net

 

풀이

 

map을 이용하여 현재 들어온 원소 중에서 지금 입력된 원소와 겹치는 것이 있다면 cnt를 증가시킨다.

그렇지 않으면 map에 입력된 원소를 추가한다.

예제가 다 입력된 후에는 cnt에 겹치는 원소의 개수가 들어있게 된다.

그 후, 전체 원소의 개수에서 겹치는 원소의 개수*2 만큼을 빼면 대칭 차집합의 원소의 개수를 구할 수 있다.

즉, (집합 A의 원소의 개수 + 집합 B의 원소의 개수) - (겹치는 원소의 개수[cnt] * 2)를 하면 된다.

 

코드

#include <iostream>
#include <map>
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
    
    int n,m;
    cin>>n>>m;

    map<int,int> m1;
    int cnt=0;

    for(int i=0; i<n+m; i++)
    {
        int a;
        cin>>a;
        if(m1.find(a)!=m1.end()) cnt++;
        else m1.insert({a,1});
    }
    cout<<n+m-(cnt*2);
}

 

'알고리즘 > 문제 풀이' 카테고리의 다른 글

백준 4963 - 섬의 개수(C++)  (0) 2022.06.19
프로그래머스 - 전화번호 목록(c++)  (0) 2022.06.17
백준 9613 - GCD 합  (0) 2022.06.05
백준 4948 - 베르트랑 공준  (0) 2022.06.04
백준 17413 - 단어 뒤집기  (0) 2022.06.03