오늘은 기본적인 자료구조인 큐, 해시 테이블, 그래프를 공부했습니다 ! 사실 저는 아직 많은 자료구조를 접해보지 않았기 때문에 이제 슬슬 아직 써보지 않았던 자료구조들도 보이는 것 같습니다 ! 알고리즘과 자료구조는 기초 중의 기초라고 생각하고 더 열심히 학습하고 있습니다 ✏️
First In First Out 이라는 개념을 가진 선형 자료구조
Linear Queue와 Cirular Queue가 존재한다.
Array 또는 Linked List로 큐를 표현할 수 있다.
array로 큐 구현
=> 보통 코딩테스트에서는 array로 구현한다 !
간혹 js에서 array의
shift()
함수를 사용해 큐를 구현하는 경우가 있는데=> shift는 쓰지 말자 !
=> shift는 선형 시간 O(n)이 걸리기 때문에 큐에서 기대하는 로직이 구현되지 않음
프로그래머스 42587번 프린터
queue를 직접 구현해줘야 하는 문제였다.
priorities들의 index
까지 같이 queue에 넣고(queue.push[1, 0]
)
나중에 pop할 때, pop된 요소의 index
와 location
이 같다면 그때의 count
값을 return 해주면 된다.
사물함 같은 자료구조 !
해시 테이블은 한정된 배열 공간에 key를 index로 변환 하여 값들을 넣는다.
index는 어떻게 구할까 ?
O(1)
이며 key를 알고 있다면 삭제, 탐색 모두 O(1)
로 수행한다.학생 정보를 관리하는 출석부 소프트웨어
=> 이름을 key로 하여 학생의 정보를 저장하면
ex) key : 박민우
=> value : 26, 남
array, object, set 으로도 사용가능하지만 보통 map
을 사용한다.
const table = new Map();
table.set("key", 100);
table.set("key2", "Hello");
console.log(table.get("key"));
const object = { a: 1 };
table.set(object, "A1"); // map은 object도 key로 사용 가능
console.log(table.get(object));
console.log(table.keys());
console.log(table.values());
table.clear()
메서드
단순한 구현 문제인데 고차함수를 적절히 사용할 수 있느냐가 중요한 문제 !
다시 풀어보기 !
정점과 정점 사이를 연결하는 간선으로 이루어진 비선형 자료구조
정점은 여러 개의 간선을 가질 수 있다.
방향 그래프와 무방향 그래프로 나눌 수 있다.
간선은 가중치를 가질 수 있다.
사이클이 발생할 수 있다.
연결 그래프
모든 정점이 서로 이동 가능
비연결 그래프
특정 정점이 다른 어느 정점으로도 갈 수 없는 그래프
완전 그래프
모든 정점끼리 연결된 상태의 그래프
사이클
그래프에서 순환이 되는 부분
const graph = Array.from(
Array(5),
() => []
);
graph[0].push(1); // 0 => 1
graph[0].push(3); // 0 => 3
graph[1].push(2); // 1 => 2
const graph = Array.from(
Array(5),
() => []
);
graph[0].push(1); // 0 => 1
graph[0].push(3); // 0 => 3
graph[1].push(2); // 1 => 2
프로그래머스 85582번 가장 먼 노드