다시 알고리즘 공부를 빠듯하게 해야할 때가 와서 오랜만에 공부하던 중 생긴 일에 대해 포스팅해보고자 한다.

코드 (시간초과 오류 발생)

N = int(input(""))
list = []
cnt = [0 for i in range(8001)]
max = 0
idx = 0
key = 0

for i in range(N):
    temp = int(input(""))
    list.append(temp)
    cnt[temp+4000] += 1

for j in range(8001):
    if cnt[j] > max:
        max = cnt[j]
        idx = j
        key = 0
    elif cnt[j] == max:
        if key == 0:
            max = cnt[j]
            idx = j
            key += 1

list.sort()
print(round(sum(list)/len(list)))
print(list[int(len(list)/2)])
print(idx-4000)
print(list[len(list)-1] - list[0])

처음 본인이 제출한 코드는 위와 같다.
image 결과는 시간 초과…

어떤 부분이 잘못된 건지 모르겠어서 인터넷에 시간 초과 오류 사례들을 검색해보았더니 이중 포문을 잘못 사용하는 등 시간이 오래걸릴 수 밖에 없는 코드들만 있었다.
그래서 고민을 좀 하며 찾아보다가 입출력 시간을 줄여주는 코드가 있다는 것을 알게되었다.

수정한 코드

import sys

N = int(sys.stdin.readline())

위 코드가 해당 부분이다. input(““)부분을 sys.stdin.readline() 구문으로 대체하였더니 시간 초과 오류가 바로 해결되어버렸다..

이전에 알고리즘을 공부할 땐 C로 진행했다가 파이썬으로 최근에 바꾸었는데, 이런 시간을 단축해주는 코드가 파이썬에도 있다는 것만 알았지 실제론 안쓰고 있었다가 이렇게 실제로 시간 초과 오류가 떠서 해당 코드를 적용하자 마자 해결되는 것을 보니 살짝 허탈하긴 하다..ㅋㅋ

파이썬의 내장 함수를 잘못 사용해서 시간 초과가 걸린 줄 알고 파이썬이 역시 쓰기 어려운가 싶었는데.. 하마터면 파이썬과 거리가 멀어질 뻔 했다… 다행이야..

앞으로도 친하게 지내자 파이썬 ㅎㅎ

댓글남기기