반응형
집합
티어 : Silver 5
시간 제한 : 1.5 초
메모리 제한 : 4 MB
알고리즘 분류 : 구편, 비트마스킹
문제
비어있는 공집합 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 연산이 주어질때마다, 결과를 출력한다.
예제 입출력
Algorithm
구현 - Simulation
문제에 따라서 진행
Code
import sys
input = sys.stdin.readline
M = int(input())
S = []
for _ in range(M):
orders = input().rstrip()
# add x 이면 S에 x 추가
if orders[:3] == 'add':
order, x = orders.split()
# S에 이미 x가 있는 경우 연산 무시
if int(x) in S:
continue
S.append(int(x))
# remove x : S에서 x를 제거
elif orders[:6] == 'remove':
order, x = orders.split()
# S에 x가 없는 경우 연산 무시
if int(x) not in S:
continue
S.remove(int(x))
# check x : S에 x가 있으면 1, 없으면 0 반환
elif orders[:5] == 'check':
order, x = orders.split()
if int(x) in S:
print(1)
else:
print(0)
# toggle x : S에 x가 있으면 x 제거, 없으면 x 추가
elif orders[:6] == 'toggle':
order, x = orders.split()
if int(x) in S:
S.remove(int(x))
else:
S.append(int(x))
# all : S를 {1, 2, ... , 20}으로 변환
elif orders == 'all':
S = list(range(1, 21))
# empty : S를 공집합으로 변경
elif orders == 'empty':
S = []
메모리: 30840 KB
시간: 4428 ms
반응형
'백준 > Python' 카테고리의 다른 글
[백준 1463] 1로 만들기 Python (0) | 2022.04.12 |
---|---|
[백준 1182] 부분수열의 합 Python (0) | 2022.04.12 |
[백준 6603] 로또 Python (0) | 2022.04.11 |
[백준 10971] 외판원 순회 2 Python (0) | 2022.04.11 |
[백준 2644] 촌수계산 Python (0) | 2022.04.08 |