[python 파이썬] 백준 11723번 집합
2021. 3. 2. 00:03ㆍAlgorithm/BOJ
반응형
이 문제는 비트마스크를 이용한 문제라고 하는데 어디에 어떻게 적용해야할지 감이 안잡혀서 생각나는대로 풀어봤다.
비트마스크 문제들도 여러개 접해보자.
풀이1 - 시간초과
이렇게 푸니까 시간초과가 나왔다
m = int(input())
S=set() #집합자료형
for _ in range(m):
tmp = input().split()
if len(tmp)==1:
if tmp[0]=='all':
s=set([i for i in range(1,21)])
else:
s=set()
continue
a,b=tmp[0],int(tmp[1])
if a=='add':
S.add(b)
if a=='remove':
S.discard(b)
if a=='toggle' and b in S:
S.discard(b)
elif a=='toggle' and b not in S:
S.add(b)
if a=='check' and b in S:
print(1)
elif a=='check' and b not in S:
print(0)
풀이2 - 정답
mong9data.tistory.com/91 이 블로그 참고해서 푼 것인데
나와 차이점은 정규표현식, sys 사용이다.
시간초과가 나올때 최대한 시간을 줄일 수 있는 방법을 찾으며 풀자
import sys
s = set()
n = int(input())
for i in range(n):
tmp = sys.stdin.readline().strip().split()
if len(tmp) == 1: # command만 있을 경우
if tmp[0] == 'all':
s = set([i for i in range(1, 21)])
else:
s = set()
continue
# command와 target이 존재할 때
command, target = tmp[0], tmp[1]
target = int(target)
if command == 'add':
s.add(target)
elif command == 'check':
print(1 if target in s else 0)
elif command == 'remove':
s.discard(target)
elif command == 'toggle':
if target in s:
s.discard(target)
else:
s.add(target)
반응형
'Algorithm > BOJ' 카테고리의 다른 글
[python 파이썬] 백준 1012번 유기농배추 (0) | 2021.03.09 |
---|---|
[python 파이썬] 백준 12813번 이진수연산 (1) | 2021.03.02 |
[python 파이썬] 백준 2667번 단지번호붙이기 (0) | 2021.02.25 |
[python 파이썬] 백준 2606번 바이러스 (0) | 2021.02.25 |
[python 파이썬] 백준 1260번 DFS와 BFS (0) | 2021.02.23 |