선택은 나의 것

[BOJ 백준] 1822번 차집합 (python) 본문

☽ Algorithm/BOJ

[BOJ 백준] 1822번 차집합 (python)

Algoribi 2020. 8. 6. 13:04

문제

BOJ 1822 : https://www.acmicpc.net/problem/1822

 

1822번: 차집합

첫째 줄에는 집합 A의 원소의 개수 n(A)와 집합 B의 원소의 개수 n(B)가 빈 칸을 사이에 두고 주어진다. (1≤n(A), n(B)≤500,000)이 주어진다. 둘째 줄에는 집합 A의 원소가, 셋째 줄에는 집합 B의 원소가

www.acmicpc.net

접근

나는 인덱스의 값을 비교해 보며 두 값이 다르면 정답 배열인 ans에 추가해주고 같다면 인덱스값만 올려주고 넘어가는 식으로 구현했다. 코드를 보면 단순하고 직관적이어서 빠르게 이해가 갈 것이다.

나는 python 초보라 이렇게 풀었지만 사실 python의 set을 이용하면 훨씬 손쉽게 차집합을 구할 수 있다. ex) set_a - set_b

위처럼 매우 간단하게 차집합을 구하는 것이 가능하다.

코드

n = list(map(int, input().split()))
numa = list(map(int, input().split()))
numb = list(map(int, input().split()))
numa.sort()
numb.sort()
ans = []
ai = bi = 0
if len(numa) == 0:
    print(0)
else:
    while 1:
        if ai >= len(numa):
            break
        elif bi >= len(numb):
            while ai < len(numa):
                ans.append(numa[ai])
                ai += 1
            break

        if numa[ai] == numb[bi]:
            ai += 1
            bi += 1
        elif numa[ai] > numb[bi]:
            bi += 1
        else:
            ans.append(numa[ai])
            ai += 1
    print(len(ans), end="\n")
    for i in ans:
        print(i, end=" ")

 

깃 허브 주소 : https://github.com/algoribi/algorithm-study

Comments