[백준] 구현 - 11723번 : 집합 (Python)

Daisy 🌼·2022년 7월 31일
0

백준

목록 보기
3/7
post-thumbnail

문제출처 : 백준

1. 문제 👻

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

  • 입출력 예시

2. My cording 👩‍💻

문제풀이 : 빠른 입출력 : sys.stdin.readline(), set자료형 활용

import sys
M = int(sys.stdin.readline())
S = set() # 중복제거

for m in range(M):
  i = sys.stdin.readline().split()

# command만 있는 경우
  if len(i) == 1: 
    if i[0] == 'all':
      S = set([i for i in range(1, 21)])
    else:
      S = set()
    continue
   
# command와 숫자가 주어진 경우
  command, N = i[0], i[1]
  N = int(N)

  if command == "add":
      S.add(N)
   
  elif command == "check":
    if N in S :
      print(1)
    else:
      print(0)
   
  elif command == "remove":
    if N in S :
      S.discard(N)

  elif i[0] == "toggle":
    if N in S :
      S.discard(N)
    else:
      S.add(N)

💡 Check point
처음에 list 자료형으로 문제를 풀었으나, 빠른 입출력을 활용했음에도 시간초과 오류가 났다. 그래서 구글링을 해보았고, set 자료형을 활용하면 시간복잡도를 해결할 수 있는 것을 처음으로 알게 됐다.

profile
세상을 이롭게하는 AI Engineer

0개의 댓글