[백준 | 파이썬] 11723 : 집합

devheyrin·2022년 3월 1일
0

codingtest

목록 보기
29/65
💡 입력에 값이 포함된 경우와 명령어로만 이루어진 경우를 구분해야 한다!

문제

비어있는 공집합 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 연산이 주어질때마다, 결과를 출력한다.

풀이 방법

all, empty 는 값을 포함하지 않는 명령어만 들어오기 때문에, 값이 포함되어 들어오는 다른 명령어와 구분해주어야 한다.

코드

import sys

m = int(sys.stdin.readline())
S = []
for _ in range(m):
    line = sys.stdin.readline().strip()
    if line == 'all':
        S = [i for i in range(1, 21)]
    elif line == 'empty':
        S.clear()
    else:
        command, value = line.split()
        value = int(value)
        if command == 'add':
            if value not in S:
                S.append(value)
        if command == 'remove':
            if value in S:
                S.remove(value)
        if command == 'check':
            if value in S:
                print(1)
            else:
                print(0)
        if command == 'toggle':
            if value in S:
                S.remove(value)
            else:
                S.append(value)
profile
개발자 헤이린

0개의 댓글