코딩테스트

[백준][Python] 11723 집합

yeeejji 2024. 4. 1. 12:13
728x90

구현 / 실버 5

🌅

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

 

11723번: 집합

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

www.acmicpc.net

 

 

 

내 풀이

import sys

M = int(sys.stdin.readline())
S = set()

for _ in range(M):
    command = sys.stdin.readline().split()

    c1 = command[0]

    if len(command) == 2:
        c2 = int(command[1])

        # add
        if c1 == 'add':
            S.add(c2)

        # remove
        elif c1 == 'remove':
            S.discard(c2)

        # check
        elif c1 == 'check':
            if c2 in S:
                print(1)
            else:
                print(0)

        # toggle
        elif c1 == 'toggle':
            if c2 in S:
                S.discard(c2)
            else:
                S.add(c2)
    else:
        # all
        if c1 == 'all':
            S = {i for i in range(1,21)}

        # empty
        elif c1 == 'empty':
            S = set()

 

 

 

코드 설명

 

제목 그대로 집합을 사용하는 문제다.

집합에 대해 잘 몰라서 배열로 구현하려고 했던 나 *^^*

S = set()

 

사용자에게 명령을 입력받아, 실행할 연산을 c1에 저장한다.

command = sys.stdin.readline().split()

c1 = command[0]

 

command의 길이가 2인 경우, add, remove, check, toggle 중에 하나일 것이다.

 

add(): 집합에 요소를 추가한다. 해당 값이 이미 존재한다면, 아무런 변화가 없다.

discard(): 집합에서 지정된 요소를 제거한다. 요소가 없어도 에러가 발생하지 않는다.

remove()도 사용할 수 있지만, 요소가 없을 때 에러가 발생한다.

if len(command) == 2:
    c2 = int(command[1])

    # add
    if c1 == 'add':
        S.add(c2)

    # remove
    elif c1 == 'remove':
        S.discard(c2)

    # check
    elif c1 == 'check':
        if c2 in S:
            print(1)
        else:
            print(0)

    # toggle
    elif c1 == 'toggle':
        if c2 in S:
            S.discard(c2)
        else:
            S.add(c2)

 

command의 길이가 1인 경우, all, empty 중에 하나일 것이다.

else:
    # all
    if c1 == 'all':
        S = {i for i in range(1,21)}

    # empty
    elif c1 == 'empty':
        S = set()

 

 

 

🙀 어려웠던 점

 

시간초과가 발생했다.

 

 

✌🏻 해결방법

 

1. input() ➡ sys.stdin.readline()

2. all 명령 수행 방식 변경

# 수정 전
S = {str(i) for i in range(1,21)}

# 수정 후
S = {i for i in range(1,21)}