Algorithm/Baekjoon

#백준 11659, 파이썬, PyPy3와 Python3 차이점

say! 2022. 9. 27. 16:35
728x90

-시간초과 코드

# 백준 누적 합 : 11659번 - 구간 합 구하기 4

n, m = map(int, input().split())  # 수의 개수 n, 합을 구해야 하는 횟수 m 입력받기

num = list(map(int, input().split())) # n개의 수 입력받기

for _ in range(m):
  i, j = map(int, input().split()) # 구간 i, j 입력받기
  sum = 0
  for k in range(i,j+1):
    sum += num[k-1]
  print(sum)

 

처음에 이렇게 제출했는데 시간초과 나왔다.

이제는 답만 나오게 생각없이 풀지말고 좀 더 효율적으로 생각을 한 번 더 해야겠다.

-다시 수정한 코드 > Python3 시간초과 / PyPy3은 통과

# 백준 누적 합 : 11659번 - 구간 합 구하기 4

n, m = map(int, input().split())  # 수의 개수 n, 합을 구해야 하는 횟수 m 입력받기

num = list(map(int, input().split())) # n개의 수 입력받기

num_sum = [0] * (n+1) # 리스트 값을 모두 0으로 초기화
for k in range(n):
  num_sum[k+1] = num_sum[k] + num[k]

for _ in range(m):
  # 구간 i, j 입력받기
  i, j = map(int, input().split()) 
  print(num_sum[j] - num_sum[i-1])

아직 이 코드는 왜 시간초과가 떴는지 잘 모르겠다..

PyPy3으로 바꾸고 제출하니까 통과되었다.

Python3와 PyPy3의 차이점을 몰라서 찾아보았다.

 

Python3 와 PyPy3 차이

Python3 와 PyPy3 차이 평소에 알고리즘 문제를 풀면서 Python을 지원하는 언어를 선택할 때, Python3와 PyPy3가 대표적으로 있었다. 원래 알던 개념은 PyPy3가 Python3의 실행시 시간이 매우 오래 걸린다는

ralp0217.tistory.com

반복을 이용하는 복잡한 코드에서는 PyPy3가 우세하다고 한다.

-다시 수정한 코드 > Python3 시간초과 / PyPy3은 시간초과, 통과..?

# 백준 누적 합 : 11659번 - 구간 합 구하기 4

import sys
n, m = map(int, input().split())  # 수의 개수 n, 합을 구해야 하는 횟수 m 입력받기

num = list(map(int, input().split())) # n개의 수 입력받기

for k in range(n-1):
  num[k+1] += num[k]
num = [0] + num # 맨 앞에 0 추가하기

for _ in range(m):
  # 구간 i, j 입력받기
  i, j = map(int, input().split()) 
  print(num[j] - num[i-1])

다른 분들의 여러가지 풀이를 보고 참고했다.

그런데 이번에는 PyPy3도 시간초과가 나왔다.

혹시나 싶어서 다시 한번 제출해봤는데 이때는 또 맞았다고 나왔다..

아직 어떤 기준(?)인지 잘 모르겠다.ㅠㅠ