-
2021080알고리즘관련/공부하기 2021. 8. 9. 15:38
알고리즘 문제를 풀때 어떤 자료구조를 사용해야하는가?
python
snake = []
snake.append((1,3))
snake.append((1,2))
snake.append((1,1))
(1,3) (1,2) (1,1) => (1,4) (1,3) (1,2)
1. 단일 객체에 대한 표현 - Point
: 간단하기 때문에 굳이 자료구조를 사용하지 않음.
2. 단일 객체에 대한 표현 - Array
1. 탐색 : O(N)
2. 삽입 : O(N) but 맨 뒤 삽입은 O(1)
3. 삭제 : O(N) but 맨 뒤 삭제는 O(1)
4. 값 조회 : O(1)
- 머리 추가 : O(N)
- 뱀 옮기기 : O(N)
3. 단일 객체에 대한 표현 - LinkedList
참고로 파이썬에선 링크드리스트가 없어 deque로 대체, CPP는 리스트 사용
1. 탐색 : O(N)
2. 삽입 : O(N) but 삽입될게 정해지면 O(1)
3. 삭제 : O(N) but 무엇이 삭제될지 안다면 O(1)
4. 값 조회 : O(1)
- 머리 추가 : O(1)
- 뱀 옮기기 : O(N)
4. 단일 객체에 대한 표현 - Doubly Linked List(Deque)
1. 탐색 : O(N)
2. 삽입 : O(N) but 맨뒤, 맨앞 O(1)
3. 삭제 : O(N) but 맨뒤, 맨앞 O(1)
4. 값 조회 : O(N), 첫번째는 O(1)
- 머리 추가 : O(1)
- 뱀 옮기기 : O(1)
5. Stack
1. 맨 위 원소 조회: O(1)
2. 맨 위 원소 삽입: O(1)
3. 맨 위 원소 삭제: O(1)
=> 앞에 추가는 불가능하다.
파이썬 queue 대신 deque를 쓰는 이유
: 코딩테스트를 할때는 queue의 여러 기능들이 시간초과를 일으킬 수 있기 때문
6. Queue
1. 맨앞, 맨뒤 원소 조회 : O(1)
2. 맨 뒤 원소 삽입 : O(1)
3. 맨 앞 원소 삭제 : O(1)
<겹치는지 여부 확인>
1. 직접 순회
시간 복잡도 : (N^2)
Points 외 추가적인 공간복잡도 : O(1)
2. Checked 배열
시간 복잡도 : O(N)
Points 외 추가적인 공간복잡도 : O(R^2) (단, R는 checked 배열의 크기)
1차원 리스트를 추가해서 시간복잡도를 줄이고 싶어 하지만 최악의 경우엔 결국 시간복잡도는 O(N), 공간복잡도는 O(R^2)가 된다. 그래서 결국 2차원 리스트를 이용하는 것과 1차원리스트에서 겹치는 부분을 체크하는 것이 동일하다.
3. Hash Set
시간 복잡도 : O(N)
Points 외 추가적인 공간복잡도 : O(N)
시간 복잡도와 공간 복잡도가 가장 적지만 구현이 어렵다.
<여러 객체를 이동>
<다중 객체에 대한 표현>
1. 1차원 배열
2. 2차원 배열
'알고리즘관련 > 공부하기' 카테고리의 다른 글
유니온 파인드: Union-Find(Disjoint Set) (1) 2024.01.31 20210811 DFS (0) 2021.08.11 Python 2차원 리스트(배열) 초기화 (0) 2021.08.01 리스트 컴프리핸션(list comprehension)을 이용한 리스트 만들기 (0) 2021.07.27 2021-07-02 알고리즘 분석과 차수 (0) 2021.07.02