1. 문제
https://www.acmicpc.net/problem/11723
11723번: 집합
첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.
www.acmicpc.net
2. 접근 방법
그리디하게 접근했는데
시간초과
메모리초과
모두 나서
ㄷㅏ시 짰습니다요 ..
일단 시간 초과 때문에 input()대신 sys.stdin으로 입력받아야합니다.
그리고 메모리 초과 때문에 정답을 리스트에 담지 않고 check가 나왔을 때는 바로바로 프린트를 해줘야합니다.
처음에는 set으로 접근했지만
연산에도 시간이 많이 소요될 것 같아
숫자가 1~21이기 때문에 불리언 값으로 접근했습니다.
(원래 add(), discard() 사용했심 ..)
3. 코드
python
import sys
N = int(sys.stdin.readline())
S = [False] * 21
for i in range(N):
order = sys.stdin.readline().strip().split()
if len(order) == 1:
if order[0] == 'all':
S = [False] + [True]*20
else:
S = [False] * 21
else:
order, x = order[0], int(order[1])
if order == 'add':
S[x] = True
elif order == 'remove':
S[x] = False
elif order == 'check':
if S[x]:
print(1)
else:
print(0)
elif order == 'toggle':
if S[x]:
S[x] = False
else:
S[x] = True
4. 마치며
마치며~!
'Algorithm > Python' 카테고리의 다른 글
[LeetCode] 125. Valid Palindrome (0) | 2021.06.01 |
---|---|
[백준 1759] 암호만들기 (1) | 2021.05.27 |
[백준 10819] 차이를 최대로 (0) | 2021.05.25 |
[프로그래머스] 주식가격 (0) | 2021.05.20 |
[프로그래머스] 튜플 (0) | 2021.05.14 |