osh1795   2년 전

제가 이 문제에 대해 2가지 풀이를 찾았습니다.

근데 #1의 경우 시간 초과가 떴고 #2는 맞았습니다.(둘 다 직접 숫자를 넣고 돌리면 답은 맞습니다.)

혹시 #1과 #2의 계산량 차이가 어디서 나는지 알 수 있을까요???

그리고 계산량을 확인하는 방법도 알 수 있을까요??

kravi   2년 전

파이썬에서 특정 위치를 제거하는 연산은 제일 끝 원소(pop())가 아니라면 O(n)의 시간 복잡도를 가집니다.

(https://wiki.python.org/moin/T...)

이유를 대략적으로 설명하자면, 리스트는 선형적으로 이어져있는 구조인데 중간에 하나를 빼려면 나머지를 그 위치로 옮겨야 합니다.

가령 [1, 2, 3]이 저장되어있는 리스트에 첫 번째 원소인 1을 제거한다고 하면 (remove(1) 혹은 pop(0)) 우리가 보는 명령어는 한 줄이지만

내부적으로는 두 번째 원소인 2를 첫 번째 자리에, 세 번째 원소인 3을 두 번째 자리로 옮기는 과정을 거쳐야 합니다.

그래서 길이가 N인 리스트에서 원소를 제거하려고 들면 최악의 경우(첫 번째 원소를 제거하는 경우) N번의 옮기기 연산이 발생하고 시간 초과가 발생하게 됩니다.

댓글을 작성하려면 로그인해야 합니다.