BOJ 11723. 집합 (Python)

2021. 2. 19. 00:38Problem Solving/BOJ

BOJ 11723. 집합

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

 

11723번: 집합

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

www.acmicpc.net

풀이

set() 쓰면 되는데 쉽지~ 하면서 풀기 시작했는데 수많은 메모리 초과와 마주해야 했다..

 

 

이유는 pypy3로 제출하였기 때문이였다.


지금껏 pypy3가 속도면에서 더 빠르다고 해서 계속 pypy3로 제출해왔는데 메모리면에서 이렇게 손해이면 python3로 제출하고 속도를 개선 할 방법을 찾는게 더 공부에 좋을지도 모르겠다. 스스로 속도를 개선하는것은 좋은 것이니.

 

또, command의 길이에 따라 예외처리를 하여 all, empty인 경우 모든 if문을 검사하지 않도록 해 주는것이 속도면에서 더욱 좋을 듯 하다.

 

pypy3와 Cpython비교에 관한 글

소스코드

import sys

S = set()
nums = [i for i in range(1,21)]

N = int(input())
for _ in range(N):
    command = sys.stdin.readline().split()

    if len(command) == 1:
        if command[0] == "all":
            S.update(nums)
        if command[0] == "empty":
            S = set()
        continue

    n = int(command[1])
    if command[0] == "add":
        S.add(n)
    if command[0] == "remove":
        S.discard(n)
    if command[0] == "check":
        if n in S:
            print(1)
        else:
            print(0)
    if command[0] == "toggle":
        if n in S:
            S.remove(n)
        else:
            S.add(n)

반응형