안녕하세요! daily_D 입니다! 👩🏻💻
오늘은 Python 으로 문제풀이할 때 시간초과가 나는 경우
해결할 수 있는 몇가지 방법을 알려드릴까합니다!
1. sys.stdin.readline()로 입력받기
입력값을 받아 저장해하는 경우 input() 으로 구현하시는 분들이 많으실텐데 sys 라는 파이썬의 표준 라이브러리를 사용하면 훨씬 빠른 시간에 적은 메모리를 사용하여 입력 받을 수 있답니다!
import sys
변수 = sys.stdin.readline()
2. 배열에 원소 추가할 때 인덱스로 접근하기
배열에 원소를 추가하면 보통 빈 배열을 만들고 append 로 추가할 때가 많은데, 이 경우 입력 받을 개수(N)를 알고있다면 N 만큼 배열을 초기화해두고 인덱스로 각자 접근해서 저장하는 것이 효율이 좋습니다.
## 7의 배수 10개 저장하기
# 수정 전
arr = []
for num in range(1, 11):
arr.append(num * 7)
# 수정 후
arr = [0 for _ in range(10)]
for num in range(1, 11):
arr[num] = num * 7
3. 줄바꿈을 출력해야하는 경우 문자열로 바꿔 출력하기
줄바꿈이 자주 반복된다면 print()보다 '\n' 사용하는 것이 좋습니다.
그렇기 때문에 문자열 변수에 정답을 저장해놓고 한 번에 출력하는 것이 효율에 좋습니다.
# [1, 2, 3, 4]를 줄바꿈으로 하나씩 출력하기
# 1
# 2
# 3
# 4
# 수정 전
arr = [1, 2, 3, 4]
for n in arr:
print(n)
# 수정 후
answer = ""
for n in arr:
answer += str(n) + '\n'
print(answer)
4. 재귀 깊이 늘려주기
파이썬은 기본적으로 재귀호출을 1000번으로 제한하고 있기 때문에 더 많은 재귀를 요구할때는 재귀깊이를 늘려주어 사용해야합니다!
import sys
sys.setrecursionlimit(1000000) #1000000번 재귀가 가능하도록 변경하기
5. queue 로 구현할 때 리스트보다 deque 사용하기
Python 에서는 리스트보다 collections.deque 모듈을 사용하는 것이 더 빠르기 때문에 Queue 를 통해 문제를 해결해야하는 상황이 있다면 deque 를 사용하는 것이 시간이 단축됩니다!
# 수정 전
queue = []
for i in range(N):
queue.append(i)
for i in range(N):
print(queue[-1])
queue.pop(-1)
# 수정 후
from collections import deque
queue = deque()
for i in range(N):
queue.append(i)
for i in range(N):
queue.popleft()
위의 방법들로 시간초과를 해결할 수도 있지만 항상 해결되는 것은 아니고
알고리즘을 수정해야 풀리는 문제들이 더 많으니 참고해주세요! ㅎㅎ
다들 많은 도움 되셨길 바랍니다! ☺️☺️
반응형
'➰ Library > Python' 카테고리의 다른 글
[Python] 특정기준으로 배열 정렬하기 (key=lambda) (0) | 2021.07.08 |
---|---|
[Python] 순열과 조합 직접 구현하기 / itertools 사용하기 (2) | 2021.06.24 |
[Python] 배열이 비어있는지 / 아닌지 확인하는 방법 (0) | 2021.04.01 |
[Python] 2차원 배열 입력받기 (0) | 2021.03.31 |
[Python] 배열 오름차순/내림차순 정렬하기 (0) | 2021.03.29 |