[BaekJoon] 백준 11723번 : 집합

Updated:

11723번 : 집합

스크린샷 2020-10-02 오후 11 11 38


집합을 구현하는 문제이기 때문에 기본으로 제공하는 set을 사용하면 된다.

그런데 여기서 엄청난 비밀을 알게되었다..

24번째 줄을 보면 my_set = set(range(1, 21)) Set 에 바로 range 를 넣어주고 있다.

이 때 my_set = set(i for i in range(1, 21)) 로 코드를 바꾸고 제출을 하면 시간초과가 발생한다.

range(1, 21) 의 타입은 range 이고 i for i in range(1, 21) 의 타입은 generator 이다.

set 에 range 를 바로 대입하는 경우보다 generator 를 바로 대입하는 경우가 시간이 두 배 정도 더 걸린다.

그런데 미리 선언을 해 두고 대입을 해주는 경우는 generatorrange 보다 세 배 가량 빠르다..

이 문제의 경우 고정된 범위를 넣어주기 때문에 가장 최선인 방법은 loop = (i for i in range(1, 21) 을 선언 한 뒤

my_set = set(loop) 를 하는 것 이다.

아주 사소한 차이지만 시간이 두 배, 세 배 차이가 날 수 있다는 것이 아주 신기했다 !


import sys


my_set = set()
for _ in range(int(input())):
    order = sys.stdin.readline().rsplit()
    
    if order[0] == 'add':
        my_set.add(int(order[1]))
    elif order[0] == 'remove':
        if int(order[1]) in my_set:
            my_set.remove(int(order[1]))
    elif order[0] == 'check':
        if int(order[1]) in my_set:
            print(1)
        else:
            print(0)
    elif order[0] == 'toggle':
        if int(order[1]) in my_set:
            my_set.remove(int(order[1]))
        else:
            my_set.add(int(order[1]))
    elif order[0] == 'all':
        my_set = set(range(1, 21))
    elif order[0] == 'empty':
        my_set.clear()



Categories:

Updated:

Leave a comment