반응형

집합

티어 : Silver 5
시간 제한 : 1.5 초
메모리 제한 : 4 MB
알고리즘 분류 : 구편, 비트마스킹

 

문제

비어있는 공집합 S가 주어졌을 때, 아래 연산을 수행하는 프로그램을 작성하시오.

  • add x: S에 x를 추가한다. (1 ≤ x ≤ 20) S에 x가 이미 있는 경우에는 연산을 무시한다.
  • remove x: S에서 x를 제거한다. (1 ≤ x ≤ 20) S에 x가 없는 경우에는 연산을 무시한다.
  • check x: S에 x가 있으면 1을, 없으면 0을 출력한다. (1 ≤ x ≤ 20)
  • toggle x: S에 x가 있으면 x를 제거하고, 없으면 x를 추가한다. (1 ≤ x ≤ 20)
  • all: S를 {1, 2, ..., 20} 으로 바꾼다.
  • empty: S를 공집합으로 바꾼다. 

 

입력

첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다.

둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.

 

출력

check 연산이 주어질때마다, 결과를 출력한다.

 

예제 입출력

 


Algorithm

구현 - Simulation
문제에 따라서 진행

 

Code

import sys
input = sys.stdin.readline

M = int(input())
S = []
for _ in range(M):
    orders = input().rstrip()
    
    # add x 이면 S에 x 추가
    if orders[:3] == 'add':
        order, x = orders.split()
        # S에 이미 x가 있는 경우 연산 무시
        if int(x) in S:
            continue
        S.append(int(x))
    
    # remove x : S에서 x를 제거
    elif orders[:6] == 'remove':
        order, x = orders.split()
        # S에 x가 없는 경우 연산 무시
        if int(x) not in S:
            continue
        S.remove(int(x))
    
    # check x : S에 x가 있으면 1, 없으면 0 반환
    elif orders[:5] == 'check':
        order, x = orders.split()
        if  int(x) in S:
            print(1)
        else:
            print(0)
            
    # toggle x : S에 x가 있으면 x 제거, 없으면 x 추가
    elif orders[:6] == 'toggle':
        order, x = orders.split()
        if int(x) in S:
            S.remove(int(x))
        else:
            S.append(int(x))
            
    # all : S를 {1, 2, ... , 20}으로 변환
    elif orders == 'all':
        S = list(range(1, 21))
    
    # empty : S를 공집합으로 변경
    elif orders == 'empty':
        S = []

메모리: 30840 KB
시간: 4428 ms

반응형

'백준 > Python' 카테고리의 다른 글

[백준 1463] 1로 만들기 Python  (0) 2022.04.12
[백준 1182] 부분수열의 합 Python  (0) 2022.04.12
[백준 6603] 로또 Python  (0) 2022.04.11
[백준 10971] 외판원 순회 2 Python  (0) 2022.04.11
[백준 2644] 촌수계산 Python  (0) 2022.04.08

+ Recent posts