문제
비어있는 공집합 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 연산이 주어질때마다, 결과를 출력한다.
풀이
문제를 보자마자 많은 연산에 비해 메모리 제한과 시간이 짧은것을 고려해
list가 아닌 set을 통해 문제를 해결해야할 것을 인지하고
set은 hashset이기 때문에 list에 비해 시간 복잡도가 현저하게 낮음
match case문을 통해 특정 명령어가 들어왔을 경우 실행해주도록 로직만 구현했더니 간단하게 해결했다.
import sys
m = int(sys.stdin.readline())
s = set()
for _ in range(m):
command_line = sys.stdin.readline().strip().split()
command = command_line[0]
try:
x = int(command_line[1])
except:
pass
match command:
case 'add':
s.add((x))
case 'remove':
if x in s:
s.remove(x)
case 'check':
if x in s:
sys.stdout.write('1'+'\n')
else:
sys.stdout.write('0'+'\n')
case 'toggle':
if x in s:
s.remove(x)
else:
s.add(x)
case 'all':
datas = set([i for i in range(21)])
case 'empty':
s = set()
'Algorithm > Problem Solving' 카테고리의 다른 글
[Beakjoon] 9375: 패션왕 신해빈 - python (0) | 2025.02.18 |
---|---|
[Beakjoon] 1764: 듣보잡 - python (0) | 2025.02.12 |
[Beakjoon] 1181: 단어 정렬 - python (0) | 2025.02.07 |
[Beakjoon] 2775: 부녀회장이 될테야 - python (0) | 2025.02.07 |
[Beakjoon] 2164: 카드 2 - python (0) | 2025.02.07 |