반응형

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

 

11723번: 집합

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

www.acmicpc.net

문제

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


풀이

처음에는 배열로 풀었으나 시간초과 + 메모리초과가 나와서 고민했다.

https://www.educative.io/answers/tuples-vs-list-in-python

 

튜플은 배열보다 메모리를 적게 사용하고, 또 이 문제에서는 내부에 x가 중복으로 속해 있지 않으니 tuple로 풀어보았다!

 

Tuples vs. List in Python

Contributor: Educative Answers Team

www.educative.io

python 코드

# 11723 집합
import sys

S = set([])
M = int(sys.stdin.readline())

for tc in range(M):
    oper = sys.stdin.readline().split()

    if len(oper) <= 1:
        if oper[0] == 'all':
            S = set(['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20'])
        elif oper[0] == 'empty':
            S = set([])
    else:
        if oper[0] == 'add':
            S.add(oper[1])
        elif oper[0] == 'remove':
            if oper[1] in S:
                S.remove(oper[1])
        elif oper[0] == 'check':
            if oper[1] in S:
                print(1)
            else:
                print(0)
        elif oper[0] == 'toggle':
            if oper[1] in S:
                S.remove(oper[1])
            else:
                S.add(oper[1])
    # print(S)
# 11723 집합
import sys

S = set([])
M = int(sys.stdin.readline())

for tc in range(M):
    oper = sys.stdin.readline().split()

    if len(oper) <= 1:
        if oper[0] == 'all':
            S = set(['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20'])
        elif oper[0] == 'empty':
            S = set([])
    else:
        if oper[0] == 'add':
            S.add(oper[1])
        elif oper[0] == 'remove':
            if oper[1] in S:
                S.remove(oper[1])
        elif oper[0] == 'check':
            if oper[1] in S:
                print(1)
            else:
                print(0)
        elif oper[0] == 'toggle':
            if oper[1] in S:
                S.remove(oper[1])
            else:
                S.add(oper[1])
    # print(S)
반응형

+ Recent posts