728x90

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

 

11723번: 집합

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

www.acmicpc.net

 

 

# 조건

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

# 접근 방법 & Solution

  • 조건의 함수들을 모두 정의하여 리스트로 풀이를 시도하였다.
  • 메모리제한이 4MB에 시간이 1.5초 였고 수행연산의 MAX가 3,000,000이라 시간초과와 메모리초과가 발생하였다.
  • 연산이 더 빠른 set형을 활용하여 풀어주었다.
  • 들어온 문자열의 길이에 따라 all, empty를 구분지어주었고, 조건에 맞는 연산을 수행하도록 해주었다.

 

# 시간초과

import sys  
sys.stdin = open('input.txt')  
  
def add(x):  
    if not x in S:  
        S.append(x)  
    return S  
  
def remove(x):  
    if x in S:  
        S.remove(x)  
    return S  
  
def check(x):  
    if x in S:  
        return 1  
    else:  
        return 0  
  
def toggle(x):  
    if x in S:  
        S.remove(x)  
    else:  
        S.append(x)  
    return S  
  
def all():  
    S = [i for i in range(1, 21)]  
  
    return S  
  
def empty():  
    S.clear()  
    return S  
  
  
S = []  
n = int(input())  
for i in range(n):  
    func = input().split()  
    if func[0] == 'add':  
        add(int(func[1]))  
  
    elif func[0] == 'remove':  
        remove(int(func[1]))  
  
  
    elif func[0] == 'check':  
        print(check(int(func[1])))  
  
    elif func[0] == 'toggle':  
        toggle(int(func[1]))  
  
    elif func[0] == 'all':  
        S = all()  
  
    elif func[0] == 'empty':  
        empty()

 

 

# 통과 코드

import sys  
  
m = int(sys.stdin.readline())  
S = set()  
  
for _ in range(m):  
    temp = sys.stdin.readline().strip().split()  
  
    if len(temp) == 1:  
        if temp[0] == "all":  
            S = set([i for i in range(1, 21)])  
        else:  
            S = set()  
  
    else:  
        func, x = temp[0], temp[1]  
        x = int(x)  
  
        if func == "add":  
            S.add(x)  
        elif func == "remove":  
            S.discard(x)  
        elif func == "check":  
            print(1 if x in S else 0)  
        elif func == "toggle":  
            if x in S:  
                S.discard(x)  
            else:  
                S.add(x)
728x90