본문 바로가기
TIL - 프로그래밍/Python 알고리즘

[백준] 11723. 집합 - Python

by chaemj97 2022. 6. 12.
728x90

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

 

11723번: 집합

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

www.acmicpc.net


  • 생각
    • 시간초과가 계속 난 문제..
      • sys, pypy, 조건 합치기
      • 추가 조건: add, toggle일 때 요소가 없다면
      • 삭제 조건: remove, toggle일 때 요소가 있다면
    • keyError가 남
      • 원인 : set.remove(x)를 실행할 때 set에 x가 존재하지 않음
      • 해결 :  remove 대신 discard
  • 코드
from sys import stdin

# 수행해야 하는 연산의 수
M = int(input())
S = set()

for _ in range(M):
    wordNum = stdin.readline().split()
    # 추가
    if wordNum[0] == 'add' or (wordNum[0] == 'toggle' and int(wordNum[1]) not in S):
        S.add(int(wordNum[1]))
    # 삭제
    elif wordNum[0] == 'remove' or (wordNum[0] == 'toggle' and int(wordNum[1]) in S):
        S.discard(int(wordNum[1]))
    # 체크
    elif wordNum[0] == 'check':
        if int(wordNum[1]) in S:
            print(1)
        else:
            print(0)
    # 집합 all
    elif wordNum[0] == 'all':
        S = {1,2,3,4,5,6,7,8,9,10,
        11,12,13,14,15,16,17,18,19,20}
    # 공집합
    elif wordNum[0] == 'empty':
        S = set()
728x90
반응형

댓글