사이트 #문제: 문제유형 / 난이도

문제 링크 : https://www.acmicpc.net/problem/11723

🔍 Inspection

문제 접근(문제 분석 → 풀이 아이디어)

🚩 FLOW

코드를 풀이할 때 적었던 플로우가 있나요?

6가지의 opeation을 변수 x 의 입력 여부에 따라 2가지로 나눠서 기능을 구현한다.

  1. 집합 S 초기화 및 입력 명령어 개수 M 변수에 정의하기
  2. all , empty 명령어
    1. all : 집합 S의 모든 값을 1로 초기화
    2. empty : 집합 S 의 모든 값을 0 으로 초기화
  3. add , remove , toggle , check
    1. add : |연산을 활용하여 s[x]=1 로 설정하기

    2. remove : &연산 을 활용해서 s[x] = 0 설정하기

    3. toggle : NOR 연산 을 활용해 있으면 0 없으면 1 로 설정하기

    4. 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)

🚩결과