🙄좋은 알고리즘이란?
효율성? 성능?
=>input을 넣은 후 output이 나오는 시간이 짧은 알고리즘
시간 복잡도가 높다 -> 느린 알고리즘
시간 복잡도가 낮다 -> 빠른 알고리즘
입력 n이 무한대로 커진다고 가정하고 시간 복잡도를 간단하게 표시
최고차항만 남기고 계수, 상수 제거
n이 커지면 시간 복잡도가 커지므로 수학 공식을 사용해 간단하게 해준다
-> 단순 계산이 되므로 시간복잡도가 O(1)이 됨
O(1)보다 O(n)이 더 많음
배열 vs 연결리스트
여러 데이터들이 연속된 메모리 공간에 저장되어 있는 구조
- 인덱스를 통해 접근
- 배열의 길이 변경 불가능 -> 길이 변경하고 싶으면 새로 생성
- 데이터 타입 고정
데이터가 담긴 여러 노드들이 순차적으로 연결된 구조
- 처음 노드부터 순차적 탐색
- 길이 자유롭게 변경 가능
- 테이터 타입 자유로움
O(1) (인덱스가 없을 때)
.append(원소)
리스트 맨 끔에 새로운 원소 삽입 => return 값 없음.pop(인덱스)
특정 인덱스에 있는 원소를 삭제 및 변환 => return 값이 있음a = [1,2,3,4,5] #len(a) => O(1)
a. append(6)
print(a) #[1,2,3,4,5,6] => return 값 없음
a = [1,2,3,4,5]
b = a.pop()
print(a) #[1,2,3,4]
print(b) #5 => return 값 있음
.count(원소)
리스트에서 해당 원소의 개수를 반환.index(원소)
리스트에서 처음으로 원소가 등장하는 인덱스 반한.sort()
리스트를 오름차순으로 정렬 -> reverse = True로 내림차순 정렬 가능.reverse()
리스트의 원소들의 순서를 거꾸로 뒤집기len(iterable)
O(1)sum()
O(n)max()
O(n)min()
O(n)sorted()
공간을 덜 생각하고 효율을 극대화reversed()
=> 이 함수의 시간복잡도 알아보기