시간 초과가 난 이유
- 비트마스크를 이용해 풀지 않았기 때문
- 파이썬 입력함수 중 input()을 사용했기 때문
시간 초과 해결방법1
원래 이 문제는 비트마스크를 이용하는 문제이다.
비트 마스크를 이용하면 시간 초과가 나지 않는다.
비트 마스크를 사용한 풀이
TIL/python
https://hyunjungc-dev.github.io/2021/05/28/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%9E%85%EB%A0%A5%ED%95%A8%EC%88%98-%EB%B9%84%EA%B5%90/
이 문제의 경우, 비트 마스크를 사용하지 않은 풀이에서 파이썬의 입력함수에 따라 시간초과가 나기도하고 아니기도 해서 파이썬의 입력함수에 대해 TIL/python 에 정리했다. 원래는 비트 마스크를 이용하는 문제이니 그렇게 푸는 것이 맞다.
시간 초과가 난 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| m = int(input()) S = set() for _ in range(m): cmd = input() if cmd == "all": S = {i for i in range(1, 21)}
elif cmd == "empty": S = set() else: cmd, x = cmd.split(' ') x = int(x) if cmd == "add": S.add(x) elif cmd == "check": print(int(x in S)) elif cmd == "remove": S.discard(x) elif cmd == "toggle": if x in S: S.discard(x) else: S.add(x)
|
시간 초과 해결 방법 2
파이썬 입력함수 중 sys.stdin.readline()을 사용한다.
위 함수로 입력을 받을 경우 맨 끝에 개행문자(줄바꿈 문자 \n)을 포함하고 있음을 주의해야한다.
시간 초과를 해결한 코드
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
| import sys
m = int(sys.stdin.readline()) S = set() for _ in range(m): cmd = sys.stdin.readline()
if cmd == "all\n": S = {i for i in range(1, 21)}
elif cmd == "empty\n": S = set() else: cmd, x = cmd.split(' ') x = int(x) if cmd == "add": S.add(x) elif cmd == "check": print(int(x in S)) elif cmd == "remove": S.discard(x) elif cmd == "toggle": if x in S: S.discard(x) else: S.add(x)
|