문제 접근(문제 분석 → 풀이 아이디어)
코드를 풀이할 때 적었던 플로우가 있나요?
6가지의 opeation을 변수 x 의 입력 여부에 따라 2가지로 나눠서 기능을 구현한다.
배열 S 을 아래와 같이 0 으로 초기화한다 (1≤x≤20 란 원소의 크기 제한 존재함)
| i = 집합 원소 | 0 | 1 | 2 | 3 | 4 | … | 18 | 19 | 20 |
|---|---|---|---|---|---|---|---|---|---|
| value = 원소 존재 여부 |
add : |연산을 활용하여 s[x]=1 로 설정하기
remove : &연산 을 활용해서 s[x] = 0 설정하기
toggle : NOR 연산 을 활용해 있으면 0 없으면 1 로 설정하기
check : 현재 집합 S 에서 s[x] 의 값을 출력하기
<aside>
⚠️ 정답 출력 시, 배열 answer 에 정답을 추가한 후 마지막에 한번에 for 문으로 출력할 경우 , 메모리 초과 발생함
→ 따라서 “check x”명령어 들어올 때 마다 바로 출력한다.
</aside>
import sys
input = sys.stdin.readline
answer = []
M = int(input())
s = [ 0 for _ in range(21)] # 1<=x <=20 숫자 제한 존재함
for _ in range(M) :
operations = list(input().split())
# 1. check , all
if len(operations) <2 :
if operations[0] == "all" :
s = [1 for _ in range(21)]
elif operations[0] == "empty" :
s = [0 for _ in range(21)]
# 2. add, remove , check , toggle
else :
ops , x = operations
if ops == "add" :
s[int(x)] = s[int(x)] | 1
elif ops == "remove" :
s[int(x)] = s[int(x)] & 0
elif ops == "check" :
print(s[int(x)])
#answer.append(s[int(x)])
elif ops == "toggle" : # NAND - 같으면 0 , 다르면 1
s[int(x)] = s[int(x)]^1
#3. 결과 출력
#for a in answer:
# print(a)