[BaekJoon] 백준 11723번 : 집합
Updated:
11723번 : 집합
집합을 구현하는 문제이기 때문에 기본으로 제공하는 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 를 바로 대입하는 경우가 시간이 두 배 정도 더 걸린다.
그런데 미리 선언을 해 두고 대입을 해주는 경우는 generator 가 range 보다 세 배 가량 빠르다..
이 문제의 경우 고정된 범위를 넣어주기 때문에 가장 최선인 방법은 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()
Leave a comment