[BOJ: 11723] - Python / 파이썬 - 집합

o_jooon_·2024년 3월 6일
0

BOJ

목록 보기
36/49
post-thumbnail

서론

구현 문제입니다.
입력 받은 명령어에 대한 예외처리만 잘 해주면 되는 문제입니다.

난이도

실버 5


문제

조건

시간 제한메모리 제한
1.5 초4 MB

비어있는 공집합 S가 주어졌을 때, 아래 연산을 수행하는 프로그램을 작성하시오.

add x: S에 x를 추가한다. (1 ≤ x ≤ 20) S에 x가 이미 있는 경우에는 연산을 무시한다.
remove x: S에서 x를 제거한다. (1 ≤ x ≤ 20) S에 x가 없는 경우에는 연산을 무시한다.
check x: S에 x가 있으면 1을, 없으면 0을 출력한다. (1 ≤ x ≤ 20)
toggle x: S에 x가 있으면 x를 제거하고, 없으면 x를 추가한다. (1 ≤ x ≤ 20)
all: S를 {1, 2, ..., 20} 으로 바꾼다.
empty: S를 공집합으로 바꾼다.


입력

첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다.

둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.


출력

check 연산이 주어질때마다, 결과를 출력한다.


예시

예제 입력 1

26
add 1
add 2
check 1
check 2
check 3
remove 2
check 1
check 2
toggle 3
check 1
check 2
check 3
check 4
all
check 10
check 20
toggle 10
remove 20
check 10
check 20
empty
check 1
toggle 1
check 1
toggle 1
check 1

예제 출력 1

1
1
0
1
0
1
0
1
0
1
1
0
0
0
1
0

풀이

풀이 자체는 매우 간단합니다.
입력을 배열로 저장 후, 문제에서 제시하는 조건에 맞추어 추가 작업만 해주면 됩니다.
다만, all과 empty의 경우엔 수를 입력받지 않기 때문에 x에는 ['all'] 또는 ['empty']만 저장되게 됩니다.
따라서, 이 경우만 잘 처리해주고 remove() 시 에러 발생 처리만 한다면 쉽게 해결할 수 있습니다.

코드

import sys
input = sys.stdin.readline

s = set()

for _ in range(int(input())):
    x = input().rstrip().split()			# 받은 입력을 배열로 저장
    if len(x) > 1:							# all과 clear의 경우 하나의 값만 있기에 예외처리
        x[1] = int(x[1])					# 나머지의 경우 편의 상 int로 변환

    if x[0] == 'add':						# add인 경우
        s.add(x[1])							# s에 해당 수 추가
    elif x[0] == 'remove' and x[1] in s:	# remove이며 s에 해당 수가 존재 하는 경우
        s.remove(x[1])						# s에서 제거
    elif x[0] == 'check':					# check인 경우
        print(1 if x[1] in s else 0)		# s에 존재하면 1, 아니면 0 출력
    elif x[0] == 'toggle':					# toggle인 경우
        if x[1] in s:						# 수가 s에 존재하면 제거
            s.remove(x[1])
        else:								# 존재하지 않으면 추가
            s.add(x[1])
    elif x[0] == 'all':						# all인 경우
        s = set(range(1, 21))				# s를 1부터 20까지의 집합으로 초기화
    elif x[0] == 'empty':					# empty인 경우
        s.clear()							# s의 모든 원소 제거

실행 결과

profile
안녕하세요.

0개의 댓글