백준/백준 파이썬

백준 파이썬 11723번 집합 (Today I Learn 2024.04.03)

군청레프 2024. 4. 3. 10:55
728x90

20240403 백준 파이썬 공부
11723번 집합

1. 문제
비어있는 공집합 S가 주어졌을 때, 아래 연산을 수행하는 프로그램을 작성하시오.

- add x: S에 x를 추가한다. (1 ≤ x ≤ 20) S에 x가 이미 있는 경우에는 연산을 무시한다.
- remove x: S에서 x를 제거한다. (1 ≤ x ≤ 20) S에 x가 없는 경우에는 연산을 무시한다.
- check x: S에 x가 있으면 1을, 없으면 0을 출력한다. (1 ≤ x ≤ 20)
- toggle x: S에 x가 있으면 x를 제거하고, 없으면 x를 추가한다. (1 ≤ x ≤ 20)
- all: S를 {1, 2, ..., 20} 으로 바꾼다.
- empty: S를 공집합으로 바꾼다.

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

3. 출력
check 연산이 주어질때마다, 결과를 출력한다.

>>>코드1. 함수로 풀어보기

import sys
s = set()
# add 함수
def add(x):
    if x not in s:
        s.add(x)
    return 0
# remove 함수
def remove(x):
    if x in s:
        s.remove(x)
    return 0
# check 함수
def check(x):
    if x in s:
        print(1)
    else:
        print(0)
    return 0
# toggle 함수
def toggle(x):
    if x in s:
        s.remove(x)
    else:
        s.add(x)
    return 0
    
for _ in range(int(input())):
    com = list(sys.stdin.readline().split())
    if com[0] == 'add':
        add(int(com[1]))
    elif com[0] == 'remove':
        remove(int(com[1]))
    elif com[0] == 'check':
        check(int(com[1]))
    elif com[0] == 'toggle':
        toggle(int(com[1]))
    elif com[0] == 'all':
        s = set(range(1, 21))
    elif com[0] == 'empty':
        s  = set()



>>>코드2. 그냥 조건문으로 풀기

import sys
s = set()  
for _ in range(int(input())):
    com = list(sys.stdin.readline().split())
    if len(com) == 2:
        x = int(com[1])
    if com[0] == 'add':
        if x not in s:
            s.add(x)
    elif com[0] == 'remove':
        if x in s:
            s.remove(x)
    elif com[0] == 'check':
        if x in s:
            print(1)
        else:
            print(0)
    elif com[0] == 'toggle':
        if x in s:
            s.remove(x)
        else:
            s.add(x)
    elif com[0] == 'all':
        s = set(range(1, 21))
    elif com[0] == 'empty':
        s.clear()



>>함수를 이용한 코드가 더 길지만 시간을 미세하게 짧게 걸렸다.

>>>문제링크
https://www.acmicpc.net/problem/11723

728x90