본문으로 바로가기

[백준 1269] 대칭 차집합

category PS/백준 문제풀이 2019. 8. 21. 22:25
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 

 

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

 

1269번: 대칭 차집합

첫째 줄에 집합 A의 원소의 개수와 집합 B의 원소의 개수가 빈 칸을 사이에 두고 주어진다. 둘째 줄에는 집합 A의 모든 원소가, 셋째 줄에는 집합 B의 모든 원소가 빈 칸을 사이에 두고 각각 주어진다. 각 집합의 원소의 개수는 200,000을 넘지 않으며, 모든 원소의 값은 100,000,000을 넘지 않는다.

www.acmicpc.net

 

원소가 있는지 없는지를 빠르게 체크하기 위해서 map을 사용했다.

c++의 map은 레드블랙트리라는 Binary Search Tree로 구현되어 있기 때문에

원소를 찾는데 있어서 O(lgn)의 시간이 걸린다.

 

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

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    int aSize, bSize;
    map<int, int> a, b;
    
    cin >> aSize >> bSize;
    
    for(int i = 0; i < aSize; i++){
        int temp;
        cin >> temp;
        a[temp] = temp;
    }
    
    for(int i = 0; i < bSize; i++){
        int temp;
        cin >> temp;
        b[temp] = temp;
    }
    
    // a에는 있고 b에는 없는 수 세기
    int sum = 0;
    for(map<int, int>::iterator it = a.begin(); it != a.end(); it++){
        if(!b[it->first])
            sum++;
    }
    
    // b에는 있고 a에는 없는 수 세기
    for(map<int, int>::iterator it = b.begin(); it != b.end(); it++){
        if(!a[it->first])
            sum++;
    }
    
    cout << sum << '\n';
    
    return 0;
}

 

 

 

인터넷을 찾아보니 set으로 푸는게 더 맞는거 같다.... ㅎ.

'PS > 백준 문제풀이' 카테고리의 다른 글

[백준 2503] 숫자 야구  (0) 2019.08.25
[백준 1620] 나는야 포켓몬 마스터 이다솜  (0) 2019.08.21
[백준 1068] 트리  (0) 2019.08.17
[백준 5397] 키로거  (0) 2019.08.09
[백준 16507] 어두운 건 무서워  (0) 2019.08.08