문제
비어있는 공집합 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를 공집합으로 바꾼다.
입력
첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다.
둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.
출력
check 연산이 주어질때마다, 결과를 출력한다.
풀이
import sys
input = sys.stdin.readline
m = int(input())
s = set()
for i in range(m):
num = input().strip().split()
if(num[0] == "all" or num[0] == "empty"):
if(num[0] == "all"):
s = set([j for j in range(1, 21)])
else:
s.clear()
else:
if(num[0] == "add"):
if int(num[1]) not in s:
s.add(int(num[1]))
elif(num[0] == "check"):
if int(num[1]) in s:
print(1)
else:
print(0)
elif(num[0] == "remove"):
if int(num[1]) in s:
s.remove(int(num[1]))
elif(num[0] == "toggle"):
if int(num[1]) in s:
s.remove(int(num[1]))
else:
s.add(int(num[1]))
메모리 초과 방지로 set을 사용하여 풀이
참고🐣
비트마스킹으로 풀이는 하진않았으나 참고하면 좋을 듯 하여 관련 블로그 링크 첨부
https://velog.io/@1998yuki0331/Python-%EB%B9%84%ED%8A%B8-%EB%A7%88%EC%8A%A4%ED%82%B9-%EC%A0%95%EB%A6%AC
문제 출처
'코테정복💫 > 파이썬 PYTHON' 카테고리의 다른 글
[백준/Python] 10814번 나이순 정렬 (0) | 2023.10.08 |
---|---|
[백준/Python] 2577번 숫자의 개수 (2) | 2023.10.08 |
[백준/Python] 11047번 동전 0 (0) | 2023.10.06 |
[백준/Python] 1920번 수 찾기 (2) | 2023.10.05 |
[백준/Python] 9012번 괄호 (2) | 2023.10.04 |