728x90
List
- 순서를 가지고 데이터를 저장하는 자료구조
- Arrary List, Linked List가 존재
- Array List
- 연속된 메모리에 저장하는 구조
- LinkedList
- 주소값을 가지고 비연속된 메모리에 저장하는 구조로 주소값을 통해 다음 값을 알 수 있음
- Array List
Array List
- 특징
- 고정된 저장 공간
- 순차적인 데이터
- static array(정적 배열)
- 선언 시에 size를 정하여 해당 size만큼의 연속된 메모리를 할당 받아 data를 연속적/순차적으로 저장하는 자료구조(static array)⇒ dynamic array 사용
- ⇒ 매번 고정되어진 크기 때문에 해당 크기보다 크게 저장이 불가능함
- random access
- 배열 변수는 자신의 첫번째 주소값을 가리킴
- 첫번째 주소값만 알고 있으면 어떤 주소든 접근 가능
- array 특성인 연속된 메모리 할당 때문에 random access가 가능
- 한번의 접근만으로 원하는 곳에 접근이 가능 해서 O(1)의 시간 복잡도를 가짐
- dynamic array(동적 배열)
- 정적 배열과 다르게 동적배열은 사이즈를 늘릴 수 있음
- static array 기반임
- resizing 과정을 거쳐기존 배열의 2배 추가
- ⇒ 이때 시간복잡도는 O(n)임
- resizing 과정
- 기존 배열 보다 크게 배열을 생성
- 기존 배열을 옮겨 닮고 새로 추가할 값을 추가
- 기존 배열 삭제
- 시간복잡도
Static arrayDynamic array
access / update | $O(1)$ | $O(1)$ |
insert_back | $O(1)$ | amortized $O(1)$ |
delete_back | $O(1)$ | $O(1)$ |
insert_at | $O(n)$ | $O(n)$ |
delete_at | $O(n)$ | $O(n)$서 |
- 선언과 초기화는 O(n)의 시간 복잡도를 가짐
- 정렬 안된 배열을 정렬하면 O(nlogn)이 걸림 ⇒ 외워야함
Linked List
- 특징
- Node라는 구조체가 연결되는 형식으로 데이터를 저장하는 자료구조
- Node는 데이터 값과 next node의 주소값을 저장
- 비연속적으로 저장되어짐
- next node의 메모리 주소값을 가리킴으로써 논리적인 연속성을 갖게 됨
- 물리적 비연속적, 논리적 연속적
- 메모리 사용이 좀 더 자유롭지만 주소값을 저장해야 하기 때문에 데이터 하나당 차지하는 메모리가 큼
import java.util.*;
class BrowserHistory {
public String homepage;
public LinkedList<String> history;
public int curPoint;
public BrowserHistory(String homepage) {
this.homepage = homepage;
history = new LinkedList<>();
history.add(homepage);
curPoint = 0;
}
public void visit(String url) {
curPoint++;
if(curPoint == history.size()){
history.add(url);
} else {
history.set(curPoint, url);
}
while(curPoint < history.size()-1){
history.removeLast();
}
}
public String back(int steps) {
curPoint = curPoint-steps < 0 ? 0 : curPoint-steps;
return history.get(curPoint);
}
public String forward(int steps) {
curPoint = curPoint+steps > history.size()-1 ? history.size()-1 : curPoint+steps;
return history.get(curPoint);
}
}
출처 : https://www.inflearn.com/course/코딩테스트-입문-파이썬/
코딩테스트 [ ALL IN ONE ] - 인프런 | 강의
코딩테스트 [ ALL IN ONE ] ✔️ 강의 하나로 끝내기, - 강의 소개 | 인프런
www.inflearn.com
문제 : https://leetcode.com/problems/design-browser-history/description/
'기초 학습 > 자료구조와 알고리즘' 카테고리의 다른 글
Hash Table/Hash Map (0) | 2023.06.04 |
---|---|
Queue / Stack(큐/스택) (0) | 2023.05.01 |
Two Pointer (투포인터) (0) | 2023.03.27 |
자료구와 알고리즘 (1) | 2023.03.26 |