코딩테스트 대비/BOJ

[Baekjoon/Python] 11723번: 집합 - 효과는 굉장했다!

bluetag_boy 2021. 11. 4. 03:44
반응형
 

11723번: 집합

첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.

www.acmicpc.net

알고리즘 분류

  • 구현
  • 비트마스킹

 

SOLUTION

import sys

M = int(sys.stdin.readline())
S = set()

for _ in range(M):
    cmd = sys.stdin.readline().split()
    order = cmd[0] # 명령어

    if len(cmd) == 1:
        if order == "all":
            S = set([i for i in range(1,21)])

        else:
            S = set()
    else:
        x = int(cmd[1])
        
        if order == "add":
            S.add(x)

        elif order == "remove":
            S.discard(x)

        elif order == "check":
            print(1 if x in S else 0)

        elif order == "toggle":
            if x in S:
                S.discard(x) # set() 에서는 list와 다르게 remove() 함수 가 아닌 discard() 함수를 사용한다

            else:
                S.add(x) # set() 에서는 list와 다르게 append() 함수 가 아닌 add() 함수를 사용한다