본문 바로가기

Python

[Python] 시간 초과 나는 경우에 적용해볼 수 있는 팁

파이썬으로 코딩 테스트 문제를 풀다보면 생각보다 시간초과가 자주 발생한다.

해결할 수 있는 몇가지 팁을 작성한다.

1. sys.stdin.readlind()로 입력받기


입력 값을 받아 저장해야하는 경우, input()으로 구현하는 경우가 많다.

sys 파이썬 표준 라이브러리를 사용하면 훨씬 빠른 시간에 적은 메모리를 사용하여 입력을 받을 수 있다.

import sys

# 방법1
var = sys.stdin.readline()

# 방법2
input = sys.stdin.readlin
var = input()

🗣️ 저는 2번째 방법을 더 자주 사용하는 편입니다.

2. 배열 & 리스트에 원소를 추가할 때 인덱스로 접근하기


배열이나 리스트에 원소를 추가하는 경우, 보통 빈 collection을 만들고 append로 추가하는 한다.

만약 입력 받아야할 개수(N)을 알고있다면, N만큼 배열을 초기화 한 후, 인덱스로 접근하여 해당 값을 변경하는 것이 더 효율적이다.

# 📢 2의 배수 10개 저장하기

# 기존 방식
a = []
for i in range(1,11):
	a.append(i*7)

# 추천하는 방식
a = [0 for _ in range(1,11)]
for i in range(1,11):
	a[i] = i*7

3. 줄바꿈을 출력해야하는 경우 문자열로 바꿔 출력하기


줄바꿈을 위해 print()를 자주 호출하는 것 보다, ‘\n’을 사용하는 것이 좋다.

즉, 문자열 변수에 답을 저장해 두고, 한번에 출력하는 것이다.

# 📢 [1, 2, 3, 4]를 한 줄에 하나씩 출력하기

# 기존 방식
a = [1, 2, 3, 4]
for i in a:
	print(i)

# 추천하는 방식
s = ""
for i in a:
	s += str(i) + '\n'
print(s)
💬
시간 초과 문제와는 별개로, 한 줄의 띄어쓰기 형태로 답을 출력해야하는 경우, for문과 함께 print(i, end=" ")을 사용하는 경우가 많은데, 아래와 같은 방법을 추천한다.
a = [1, 2, 3, 4]

# 기존 방식
for i in a:
	print(i, end= " ")

# 추천하는 방식
print(*a)

4. 재귀 깊이 늘려주기


파이썬은 default 재귀호출 횟수가 1000번으로 제한된다.

하지만, 아래와 같은 방법으로 재귀 깊이를 늘려 줄 수 있다.

import sys
sys.setrecursionlimit(1000000) 

5. queue 구현 시, list보다 deque 사용하기


파이썬에서는 list보다 collections.deque 모듈을 사용하는 것이 더 빠르다.

그렇기 때문에 Queue를 사용하여 문제를 해결해야하는 상황이라면, deque를 사용하는 것이 더 효율적이다.

# 기존 방식
q = []
for i in range(N):
	q.append(i)
for i in range(N):
	print(q[-1])
	q.pop(-1)

# 추천하는 방식
from collection import deque
q = deque()
for i in range(N):
	q.append(i)
for i in range(N):
	q.popleft()

Uploaded by N2T

'Python' 카테고리의 다른 글

[Python] heapq: min heap & max heap  (0) 2023.01.23