➰ Library/Python

[Python] 시간 초과 날때 해결방법!

 사과개발자 2021. 4. 26. 23:08

안녕하세요! 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()

위의 방법들로 시간초과를 해결할 수도 있지만 항상 해결되는 것은 아니고
알고리즘을 수정해야 풀리는 문제들이 더 많으니 참고해주세요! ㅎㅎ
다들 많은 도움 되셨길 바랍니다! ☺️☺️

반응형