구현 문제입니다.
입력 받은 명령어에 대한 예외처리만 잘 해주면 되는 문제입니다.
실버 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 연산이 주어질때마다, 결과를 출력한다.
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
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의 모든 원소 제거