문제
비어있는 공집합 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개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.
import sys M = int(sys.stdin.readline()) S = set() # 중복제거 for m in range(M): i = sys.stdin.readline().split() # command만 있는 경우 if len(i) == 1: if i[0] == 'all': S = set([i for i in range(1, 21)]) else: S = set() continue # command와 숫자가 주어진 경우 command, N = i[0], i[1] N = int(N) if command == "add": S.add(N) elif command == "check": if N in S : print(1) else: print(0) elif command == "remove": if N in S : S.discard(N) elif i[0] == "toggle": if N in S : S.discard(N) else: S.add(N)
💡 Check point
처음에 list 자료형으로 문제를 풀었으나, 빠른 입출력을 활용했음에도 시간초과 오류가 났다. 그래서 구글링을 해보았고, set 자료형을 활용하면 시간복잡도를 해결할 수 있는 것을 처음으로 알게 됐다.