백준 - 11723

KangMyungJoe·2023년 8월 28일
0

algorithm

목록 보기
38/55

문제 설명

집합을 구성하여, 각 명령어에 대한 활동을 수행하면 되는 문제다.

연산의 수가 300만번까지 갈 수 있기 때문에, all과 같은 연산을 사용할 때 시간 초과가 발생할 수 있어{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}과 같이 무식한 방법을 사용해야 했다.


접근 방식

  1. all, empty와 같은 키워드가 존재하기 때문에, 길이에 따라 명령어를 구분하여 숫자를 추출
  2. 명령어가 하는 행동을 그대로 코딩
  3. set()을 사용하여 중복이 존재하지 않도록 관리 (어짜피 중복이 들어갈 일이 없기 때문)
  4. all 키워드에서는 연산을 수행하지 않아야 함. (문제 설명에 있는 내용과 중복)

작성한 코드

import sys
n = int(sys.stdin.readline())

result = set()

for i in range(n):
    command_line = sys.stdin.readline().split()
    command = command_line[0]

    if len(command_line) > 1:
        num = int(command_line[1])

    if command == "add":
        if num not in result:
            result.add(num)
    
    if command == "remove":
        if num in result:
            result.discard(num)
    
    if command == "check":
        if num in result:
            print(1)
        else:
            print(0)
    
    if command == "toggle":
        if num in result:
            result.discard(num)
        else:
            result.add(num)
    
    if command == "all":
        result = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}
    
    if command == "empty":
        result = set()

연구 작업으로 알고리즘 공부가 밀렸다. 다시 시작해보자 :)

profile
소통을 잘하는 개발자가 되고 싶습니다.

0개의 댓글