728x90
반응형
https://www.acmicpc.net/problem/11723
11723번: 집합
첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다.
www.acmicpc.net
풀이
처음 코드를 작성 할때 set을 이용했다. 이유는 포함유무 체크와 추가 제거의 시간복잡도가 O(1)이기 때문이다.
하지만 set을 써도 시간초과가 발생했다.
그래서 더 시간을 줄일 방법이 있을까 생각했다. 그러다 문제에서 x의 범위가 1~20인것을 보고 범위가 좁으니 비트마스킹을 이용해도 되겠다는 생각이 들었다.
그래서 check을 False로 길이가 21인 배열을 만들었다. 이유는 각 숫자와 인덱스를 맞추기 위해 앞에 0을 추가했다.
그리고 각 조건이 주어질때마다 배열에 수를 저장하지 않고 비트마스킹을 이용해 들어있으면 True, 비어있으면 False로 표시하면서 문제를 해결했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
import sys
input=sys.stdin.readline
check=[False]*21
for _ in range(int(input())):
s=list(input().split())
if s[0]=='add':
if not check[int(s[1])]:
check[int(s[1])]=True
else:
continue
elif s[0]=='remove':
if check[int(s[1])]:
check[int(s[1])]=False
else:
continue
elif s[0]=='check':
if check[int(s[1])]:
print(1)
else:
print(0)
elif s[0]=='toggle':
if check[int(s[1])]:
check[int(s[1])]=False
else:
check[int(s[1])] = True
elif s[0]=='all':
check=[True]*21
elif s[0]=='empty':
check=[False]*21
|
cs |
728x90
반응형
'Python3 > 백준 알고리즘' 카테고리의 다른 글
2022.02.28 [백준] (python 파이썬) 안정적인 문자열 (0) | 2022.02.28 |
---|---|
2022.02.28 [백준] (python 파이썬) 막대기 (0) | 2022.02.28 |
2022.02.26 [백준] (python 파이썬) 듣보잡 (0) | 2022.02.26 |
2022.02.26 [백준] (python 파이썬) 나는야 포켓몬 마스터 이다솜 (0) | 2022.02.26 |
2022.02.25 [백준] (python 파이썬) 마인크래프트 (0) | 2022.02.25 |
댓글