본문 바로가기
PS/백준

[테스트케이스 정리] 백준 11723 번: 집합 python, 파이썬

by 지기_ 2021. 7. 23.
반응형

1.문제

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

 

11723번: 집합

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

www.acmicpc.net

 

 

 

2. 풀이

비트마스크

 

 

 

3. 구현

import sys
# sys.stdin=open('input.txt')

M = int(sys.stdin.readline())
bit=0

while M:
    M-=1
    cmd = sys.stdin.readline().split()
    
    if len(cmd)==1:
        c = cmd[0]
    else:
        c = cmd[0]
        n = int(cmd[1])-1

    if c=='add':
        bit = bit|(1<<n)
    elif c=='remove':
        bit = bit& ~(1<<n)
    elif c=='check':
        if bit & (1<<n)==0:
            print(0)
        else:
            print(1)
    elif c=='toggle':
        bit = bit^(1<<n)
    elif c=='all':
        bit = (1<<20)-1
    else: # empty
        bit =0

 

 

4. 테스트케이스 정리

 

@djm03178  

2
all
check 20

정답: 1

 

 

@houma757  

2
remove 1
check 1

정답: 0

 

 

 

주의해야할 점:

 

n을 입력받은 그대로 1번부터 센다면 (1 << 21) - 1 로 all을 해야하고
n-1을 사용해 0번부터 센다면 (1 << 20) - 1 로 all 할 수 있음.

 

input을 하면 입력이 너무 느려서 readline을 쓰는 것이 좋다.
sys.stdin.readline로 문자열을 입력 받았을 때 \n까지 포함되므로 이 부분 해결

 

set()으로 푼다면
remove()를 호출할 때, 삭제할 원소가 없으면 에러를 발생 -> discard 매서드 사용

반응형

댓글