[오늘의 문제] 차집합

shlim55·2026년 1월 5일

코딩테스트

목록 보기
204/223

출처: https://www.acmicpc.net/problem/1822

문제
몇 개의 자연수로 이루어진 두 집합 A와 B가 있다. 집합 A에는 속하면서 집합 B에는 속하지 않는 모든 원소를 구하는 프로그램을 작성하시오.

입력
첫째 줄에는 집합 A의 원소의 개수 n(A)와 집합 B의 원소의 개수 n(B)가 빈 칸을 사이에 두고 주어진다. (1 ≤ n(A), n(B) ≤ 500,000)이 주어진다. 둘째 줄에는 집합 A의 원소가, 셋째 줄에는 집합 B의 원소가 빈 칸을 사이에 두고 주어진다. 하나의 집합의 원소는 2,147,483,647 이하의 자연수이며, 하나의 집합에 속하는 모든 원소의 값은 다르다.

출력
첫째 줄에 집합 A에는 속하면서 집합 B에는 속하지 않는 원소의 개수를 출력한다. 다음 줄에는 구체적인 원소를 빈 칸을 사이에 두고 증가하는 순서로 출력한다. 집합 A에는 속하면서 집합 B에는 속하지 않는 원소가 없다면 첫째 줄에 0만을 출력하면 된다.

예제 입력 1
4 3
2 5 11 7
9 7 4

예제 출력 1
3
2 5 11

예제 입력 2
3 5
2 5 4
1 2 3 4 5

예제 출력 2
0

내가 한 풀이

'''
몇 개의 자연수로 이루어진 두 집합 A와 B가 있다. 집합 A에는 속하면서 집합 B에는 속하지 않는 모든 원소를 구하는 프로그램을 작성하시오.

첫째 줄에는 집합 A의 원소의 개수 n(A)와 집합 B의 원소의 개수 n(B)가 빈 칸을 사이에 두고 주어진다. 
(1 ≤ n(A), n(B) ≤ 500,000)이 주어진다.
 둘째 줄에는 집합 A의 원소가, 셋째 줄에는 집합 B의 원소가 빈 칸을 사이에 두고 주어진다. 
 하나의 집합의 원소는 2,147,483,647 이하의 자연수이며, 
하나의 집합에 속하는 모든 원소의 값은 다르다.
'''
import sys


# 1,5
# a = set([1,2, 3, 7])
# b = set([1, 1, 2, 3, 4])

input = sys.stdin.read
data = input().split()

a = int(data[0])# 갯수 입력
b = int(data[1])# 갯수 입력 

def set_definiation(a, b):

    # 1. 집합 A 만들기 (2번 인덱스부터 a개만큼)
    set_a = set(map(int, data[2 : 2+a]))

    # 2. 집합 B 만들기 (2+a번 인덱스부터 끝까지)
    set_b = set(map(int, data[2+a : ]))

    diff = sorted(list(set_a - set_b))
    length = len(diff)
    if length > 0:
        result_set = diff

    return length, diff

count, result = set_definiation(a, b)
print(count)
if count > 0:
    print(*(result))

트러블 슈팅

  1. sys.stdin을 활용한 실제 입력 받기
    일단 input을 sys import를 통해 받는것.

sys.stdin.read().split()을 사용하면 모든 숫자를 한 번에 리스트로 받아올 수있다.

  1. 정렬과 출력 형식
    보통 집합 문제의 결과는 오름차순으로 출력하라는 조건이 붙는 경우가 많다.

그리고
리스트 슬라이싱을 이용해 A와 B 집합 만들기 이게 내겐 좀 힘들었다.

아이디어 자체는 대충 어떻게 해야겠다가 떠오르는 편

profile
A Normal Programmer

0개의 댓글