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

 

11723번: 집합

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

www.acmicpc.net


문제 해결을 위한 과정

이 문제의 경우 알고리즘의 분류상 구현 문제로 문제에서 주어진 대로만 차분하게 구현하면 쉽게 해결할 수 있는 문제였습니다. 다만 실버 5 티어라는 난이도에 비해 정답률이 29%로 낮은 편인데 그 이유는 메모리 제한 때문이라 생각됩니다. 저 역시 pypy3로 풀었을 때 메모리 초과 판정을 받았고 pypy는 시간 복잡도가 좋은 대신 공간 복잡도 측면에서 불리하다는 사실을 알게 되어 python3으로 해결한 결과 정답 판정을 받을 수 있었습니다. 문제의 조건을 그대로 구현하면 되는 문제이기 때문에 해결방안은 따로 제시하지 않습니다.


소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import sys
input = sys.stdin.readline
 
= int(input())
= set()
for i in range(n):
  a = input().split()
  if a[0== 'empty' or a[0== 'all':
    if a[0== 'all':
      s = set([1234567891011121314151617181920])
    elif a[0== 'empty':
      s = set()
  else:
    b = int(a[1])
    if a[0== 'add':
      s.add(b)
    elif a[0== 'check':
      if s.intersection(set([b])):
        print(1)
      else:
        print(0)
    elif a[0== 'remove':
      if s.intersection(set([b])):
        s.remove(b)
    elif a[0== 'toggle':
      if s.intersection(set([b])):
        s.remove(b)
      else:
        s.add(b)
cs

+ Recent posts