병합 정렬 코드 짰는데
왜 자꾸 시간 초과가 뜰까요??
#A = [42,32,24,60,15,5,90,45]
N = int(input())
A = [0]*N
for i in range(N):
A[i] = int(input())
def division(lst):
if len(lst) == 1:
return lst
mid = len(lst)//2
left = []
right = []
for i in range(0, mid):
left.append(lst[i])
for i in range(mid, len(lst)):
right.append(lst[i])
return merge(division(left), division(right))
def merge(left_lst, right_lst):
result = []
first_index = 0
second_index = 0
while first_index < len(left_lst) and second_index < len(right_lst):
if left_lst[first_index] < right_lst[second_index]:
result.append(left_lst[first_index])
first_index += 1
else:
result.append(right_lst[second_index])
second_index += 1
if first_index < len(left_lst):
for i in range(first_index, len(left_lst)):
result.append(left_lst[i])
if second_index < len(right_lst):
for i in range(second_index, len(right_lst)):
result.append(right_lst[i])
return result
S = division(A)
for i in S:
print(i)
자세히는 못 봤는데 len(list)는 O(N)이라 한 번 저장해놓고 쓰는 게 좋아요
헉 꿀팁 감사합니당
len(list) O(1)이에요;;
O(1)이다 게이야 ㅋㅋ
또 파이썬은 줄마다 입출력을 하면 많이 느려서 fast i/o 사용하셔야 할 것 같아요
이거 시간 복잡도 N LOG N 아닌가요?
파이썬 자체가 ㅈㄴ느려서 시간복잡도 같아도 내장돼있는거 쓰는게 젤 빠름
나 백준첨할때 최대최소구하기 배열원소개수세기 등등 직접구현했다가 시간초과난거 내장함수로바꾸니 통과된거 있던걸로 기억
내장 되어 있는거 쓰라는게 어떤 말씀이신가요??? 위 문제에서 내장으로 쓸게 있나요? 그리고 백준으로 내장함수 쓸 수 있어요??
리스트.sort(key=function,reverse= bool)
만약 정렬 직접구현하면서 공부하고 싶다면 빠르고 성능좋은 c c++..
이 댓글은 게시물 작성자가 삭제하였습니다.