Algorithm Study/Python

[백준 파이썬] # 11723 집합

728x90
반응형

Silver IV

# 11723 집합

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

 

17219번: 비밀번호 찾기

첫째 줄에 저장된 사이트 주소의 수 N(1 ≤ N ≤ 100,000)과 비밀번호를 찾으려는 사이트 주소의 수 M(1 ≤ M ≤ 100,000)이 주어진다. 두번째 줄부터 N개의 줄에 걸쳐 각 줄에 사이트 주소와 비밀번

www.acmicpc.net

 

풀이

import sys
M = int(sys.stdin.readline())
S = [0] * 21

for i in range(M):
    order = sys.stdin.readline().split()
    
    if order[0] == 'add':
        if S[int(order[1])] == 0:
            S[int(order[1])] = 1
    
    elif order[0] == 'remove':
        if S[int(order[1])] == 1:
            S[int(order[1])] = 0
    
    elif order[0] == 'check':
        if S[int(order[1])] == 1:
            print(1)
        else:
            print(0)
    
    elif order[0] == 'toggle':
        if S[int(order[1])] == 1:
            S[int(order[1])] = 0
        else:
            S[int(order[1])] = 1
    
    elif order[0] == 'all':
        S = [1] * 21
    
    elif order[0] == 'empty':
        S = [0] * 21

 

후기

  • 0/1, True/False 등의 이분법으로 표기하는 것을 비트마스킹이라고 한다. 비트마스킹을 사용하면 컴퓨터에서 더 빠르게 수행되고, 더 적은 메모리를 사용하는 특징이 있다.