공부하기/백준

[Python] 백준 풀기 11723 - 집합

XEV 2023. 1. 27. 23:35

파이썬 백준 11723번

실버 5

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

 

11723번: 집합

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

www.acmicpc.net

 

 

 

 

 

문제 보기

분류: 구현, 비트마스킹

 

 

 

 

 

문제 풀기

비트마스킹이란 것을 사용하라는 문제 같은데 비트마스킹을 사용하지 않고 풀이하였다.

왜 그런지 모르겠지만 제출하고 채점하는 과정에서 퍼센트가 더디게 올라갔다.

 

집합 S 는 1 ~ 20 번호로 이루어진 집합이기에 index 에 맞춰 21 개의 0 으로 초기화된 리스트를 생성하고 조건에 맞게 0 또는 1 로 표시한다.

명령어와 데이터 또는 명령어만 입력되는 두 가지 형태의 입력에 대해 리스트로 입력을 받고 그에 따른 조건으로 분리하여 add, remove, check, toggle, all 그리고 empty 각각의 함수에 적용한다.

 

 

 

 

 

코드 보기

import sys
inputdata = sys.stdin.readline


def fnAdd(x): # add 명령에 의해 해당 index 값을 1 로 표시.
    s_ls[x] = 1

def fnRemove(x): # remove 명령에 의해 해당 index 값을 0 로 표시.
    s_ls[x] = 0

def fnCheck(x): # check 명령에 의해 해당 index 값을 출력.
    if s_ls[x] == 1:
        print(1)
    elif s_ls[x] == 0:
        print(0)

def fnToggle(x): # toggle 명령에 의해 해당 index 값을 0 또는 1 로 변경.
    if s_ls[x] == 1:
        s_ls[x] = 0
    elif s_ls[x] == 0:
        s_ls[x] = 1

def fnAll(): # all 명령에 의해 모든 값을 1 로 변경.
    for i in range(21):
        s_ls[i] = 1

def fnEmpty(): # empty 명령에 의해 모든 갑을 0 으로 변경.
    for i in range(21):
        s_ls[i] = 0


if __name__ == "__main__":
    s_ls = [0] * 21 # 집합 S 의 범위에 해당하는 값이 0 인 리스트를 생성. index 를 맞추기 위해 21 개 생성.
    
    testCase = int(inputdata().strip())
    
    while testCase > 0:
        command_ls = list(map(str, inputdata().split())) # 명령어와 데이터가 들어오는 입력라인과 명령어만 들어오는 입력라인을 모두 받기 위해 리스트로 저장.
        
        if len(command_ls) == 2: # 명령어와 데이터가 들어 올때.
            command = command_ls[0]
            x = int(command_ls[1]) # string 으로 받은 숫자를 int 타입으로 변경.
            print(f'command, x: {command}, {x}') # TEST PRINT
            if command == "add":
                fnAdd(x)
            elif command == "remove":
                fnRemove(x)
            elif command == "check":
                fnCheck(x)
            elif command == "toggle":
                fnToggle(x)
                
        elif len(command_ls) == 1: # 명령어만 들어 올때.
            command = command_ls[0]
            print(f'command: {command}') # TEST PRINT
            if command == "all":
                fnAll()
            elif command == "empty":
                fnEmpty()
        
        testCase -= 1
        print(f's_ls: {s_ls}') # TEST PRINT
        print()



'''

command, x: add, 1
s_ls: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

command, x: add, 2
s_ls: [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

command, x: check, 1
1
s_ls: [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

command, x: check, 2
1
s_ls: [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

command, x: check, 3
0
s_ls: [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

command, x: remove, 2
s_ls: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

command, x: check, 1
1
s_ls: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

command, x: check, 2
0
s_ls: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

command, x: toggle, 3
s_ls: [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

command, x: check, 1
1
s_ls: [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

command, x: check, 2
0
s_ls: [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

command, x: check, 3
1
s_ls: [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

command, x: check, 4
0
s_ls: [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

command: all
s_ls: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

command, x: check, 10
1
s_ls: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

command, x: check, 20
1
s_ls: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

command, x: toggle, 10
s_ls: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

command, x: remove, 20
s_ls: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]

command, x: check, 10
0
s_ls: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]

command, x: check, 20
0
s_ls: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]

command: empty
s_ls: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

command, x: check, 1
0
s_ls: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

command, x: toggle, 1
s_ls: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

command, x: check, 1
1
s_ls: [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

command, x: toggle, 1
s_ls: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

command, x: check, 1
0
s_ls: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

'''