본문 바로가기

알고리즘

(4)
[PS] Swift에서 Queue 구현하기(Feat.백준 18258 시간초과 이슈..) 스위프트에서의 Queue 스위프트는 Queue라는 자료구조를 지원하지 않기 때문에, PS를 위해서 직접 구현해줘야 할 때가 있다. 효율적인 형태의 큐를 직접 구현해보자! 스택의 경우에는 스위프트 기본 제공 자료구조인 Array의 popLast() 메서드를 이용해서 시간복잡도 O(1)으로 간단히 구현할 수 있지만, queue에서 필요한 dequeue()에 사용할만한 메서드인 removeFirst()가 시간복잡도 O(N)인 관계로 커스텀 큐를 구현해줘야 한다! 스위프트를 이용한 Queue 구현 아이디어에는 크게 4가지가 있다. 1. 고전적인 방식으로 링크드 리스트 사용하기 : 공간복잡도가 좋지 않고, 접근성이 좋지 않음 2. Ring Buffer를 이용하기 : 정적 배열을 사용해야 하기 때문에 입력 받을 크..
[Algorithm] 해시 테이블의 개념, 성질, 해시 함수의 생성 방법 및 충돌의 해결 Hash Table이란? 해시 테이블은 해시 함수를 통해 키가 저장될 자리를 키의 값으로 결정하는 자료구조이다. 특정 키를 검색, 삽입, 삭제하기 위해 사용할 수 있는 자료구조로 리스트, 검색 트리 등을 사용할 수 있는데, 해시 테이블은 여기에 걸리는 시간을 최대한 단축하고자 만들어진 자료구조이다. 검색, 삽입, 삭제 작업에 배열을 이용한다면 평균 Θ(n) 시간이 걸리고, 일반적인 검색 트리를 이용하면 평균 Θ(log n), 최악의 경우 Θ(n) 시간이 걸린다. 그리고 균형 이진 검색 트리를 사용하면 최악의 경우에도 Θ(log n)을 보장 받을 수 있다. 이러한 자료구조도 좋은 성능을 낼 수 있지만, 더한 효율을 내기 위해서 만들어진 것이 해시테이블인 것이다. 해시 테이블의 기본적인 아이디어는, 앞선 자..
[Algorithm] 균형 검색 트리의 대표적인 예시, AVL Tree란 무엇일까? AVL Tree를 이루는 노드와 Tree의 수선 방법 균형 검색 트리란? 이진 검색 트리에서 검색, 삽입, 삭제의 평균 시간은 Θ(log n) 시간인데, 균형이 잘 맞지 않는 경우에는 최대 Θ(n)의 시간이 될 수 있다. 따라서 이진 검색 트리의 균형이 잘 맞을 수 있게 특정 성질들을 정의해준 것이 균형 이진 검색 트리이다. 이러한 균형 이진 검색 트리에는 AVL 트리와 RB(레드-블랙) 트리가 있는데, 이진 검색 트리에 균형을 맞춰주는 균형 이진 검색 트리 외에도 균형 다진 검색 트리 또한 존재한다. 균형 다진 검색 트리의 대표로는 B-트리가 있다. AVL(균형 검색 트리)란? AVL 트리는 이진 검색 트리가 항상 균형을 유지하도록 한 균형 이진 검색 트리 중의 하나이다. 이진 검색 트리의 검색, 삽입, 삭제의 속도는 트리의 height와 강하게 연관되어..
[Algorithm] 그래프 기본 개념과 그래프 탐색(BFS, DFS) Graph란 무엇일까? Graph는 일련의 노드(node, vertex, 정점) 집합 V와 엣지(edge, 간선) 집합 E로 구성된 자료구조이다. 보통 정점에는 Data가 들어가고, 간선은 그 Data들 간의 관계를 표현한다. 그래서 G = (V, E) 와 같이 표현할 수 있다. 간선으로 연결된 두 정점은 관계가 있다고 말할 수 있으며, 이를 인접(Adjacent)하다고 한다. Graph의 종류 무향 그래프 간선에 방향이 없는 그래프로, 가장 기본적인 형태의 그래프이다. 가중 그래프 간선에 가중치가 존재하는 그래프로, 거리나 친밀도 등 수치 등 관계의 수치를 표현할 수 있다. 방향 그래프(유향 그래프) 간선에 방향이 존재하는 그래프 가중 방향 그래프 간선에 방향과 가중치가 모두 존재하는 그래프 Graph..