백준 - 집합 / Silver 5 / 11723번 / Python

Ed Park·2023년 2월 20일
0
post-custom-banner

문제 📋

백준 - 집합

풀이 📝

import sys

n = int(sys.stdin.readline())
s = set()

for _ in range(n):
    command = sys.stdin.readline().split()  # 최대 300만 라인의 입력이 들어오기 때문에 나눠서 입력을 받아야함.

    if len(command) == 1:
        if command[0] == "all":
            s = {i+1 for i in range(20)}
        else:
            s.clear()
    else:
        cmd = command[0]
        target = int(command[1])

        if cmd == "add":
            s.add(target)
        elif cmd == "remove":
            s.discard(target)
        elif cmd == "toggle":
            if target in s:
                s.remove(target)
            else:
                s.add(target)
        else:
            if target in s:
                print(1)
            else:
                print(0)

집합 S를 만들고 명령어에 따라 집합에 연산을 진행하면 되는 쉬운 문제이다.

하지만 문제 제출시 메모리 초과가 계속해서 발생하였다.
해당 문제의 메모리 제한은 4MB로 상당히 작은 편이었지만
set의 원소를 최대 20개만 저장하기 때문에 원인을 찾는데 어려움을 겪었다.

원인은 바로 입력에 있었다.
초기 코드에는 명령어들을 전부 하나의 리스트에 입력 받아놓고 하나씩 처리했는데
명령어가 최대 300만 line이기 때문에 메모리 제한을 초과한 것이다.

따라서 위와 같이 하나의 입력에 대하여 결과를 출력하도록
코드를 수정하였고 문제없이 통과 할 수 있었다.

profile
Simple is the best
post-custom-banner

0개의 댓글