백준 4

[자료구조] 분리 집합, Union-Find에 대해서 알아보자!

분리집합(Union-Find)은 그래프 알고리즘 중 하나로 코딩 테스트 킬러 문제로 주로 나오는 알고리즘입니다. 서로소 집합일단 유니온 파인드 알고리즘을 알기 전 disjoint sets을 먼저 이해해야 하는데요, 쉽게 설명하면 공통 원소가 없는 두 집합을 뜻합니다. 아래 그림을 보시면 왼쪽은 서로소 집합을 나타내고 오른쪽은 공통된 7이라는 원소 때문에 서로소 관계가 깨지게 됩니다. 따라서 왼쪽은 서로소 집합, 오른쪽은 서로소 집합이 아니게 되는 것이죠. Union-Find는 서로소 집합 자료구조를 만들 수 있습니다. 집합에서 노드들을 합치고(Union), 부모를 찾아(Find) 서로소 집합을 찾아내는 알고리즘인 것이죠. 한마디로 DSU(Disjoint Sets Union) 자료구조를 만들어 내는 과정..

공부/CS 공부 2023.02.03

[자료구조] 힙 자료구조인 heapq에 대해 알아보자!

힙의 개념힙은 완전 이진트리로 구성된 자료구조이다.우선순위 큐를 위해 만들어진 자료구조이다.힙 자료구조로 우선순위 큐를 구현할 때 삽입 삭제 모두 O(logN) 연산을 가진다.최소 힙: 부모 노드의 값이 자식노드의 값보다 항상 작은 힙최대 힙: 부모 노드의 값이 자식노드의 값보다 항상 큰 힙위 사진과 같이 항상 완전 이진트리로 구성되어 최소 최대 값을 빠르게 찾아낼 수 있도록 설계되어있다. heapq 모듈파이썬에선 heapq 모듈을 이용하여 최소 힙과 최대 힙 모두 구현할 수 있다. heapq 메서드heappush(heap, item)힙 불변성을 유지하면서 item 값을 heap으로 푸쉬한다.heapq.heappop(heap)힙 불변성을 유지하면서, heap에서 가장 작은 항목을 pop 하고 반환해 ..

공부/CS 공부 2023.01.26

[자료구조] 파이썬 자료구조의 꽃 deque에 대해 알아보자!

최근 알고리즘 테스트 공부를 위해서 파이썬을 꽤나 자주 이용하는데, 문제에서 빈번하게 사용되는 deque에 대해서 알아봅시다! Deque, 왜 쓰나요?먼저 주 언어가 Javascript였던 제가, 파이썬으로 알고리즘을 하게 된 가장 큰 이유가 바로 deque의 유무였습니다. 자바스크립트에서 후입선출 방식의 Queue나 양쪽에서 삽입 삭제가 가능한 Double-ended Queue 같은 자료구조를 구현하기 위해선, 링크드리스트를 거의 필수로 사용해야 했습니다. 예를 들어 1, 2, 3이 있는 배열을 큐 방식으로 넣고 뺀다고 생각해 봅시다.1, 2, 3에서 가장 먼저 들어왔던 1의 값만 뺀다고 생각 해봅시다. 그럼 1을 빼기 위해서, 뒤에 있는 모든 index들이 한 칸 앞으로 와야 하는 귀찮은 일이 발생합..

공부/CS 공부 2023.01.17

[알고리즘] DFS와 BFS

알고리즘 공부를 하는 중에 그래프 탐색 파트를 공부하기 시작해서 짚고 넘어가는 것이 좋겠다고 생각하여 DFS와 BFS를 알아보고, 파이썬으로 구현까지 해본다. DFS (Depth-First Search)깊이 우선 탐색이라고 부르고 그래프에서 깊은 부분을 우선 탐색하는 알고리즘이다.갈 수 있는 한 맨 밑까지 탐색하여 리프노드(맨 아래 노드)를 방문하고, 이전 갈림길에서 선택하지 않은 노드들을 방문하는 식으로 탐색한다.방문 위치를 기록 하는 스택을 이용하여 해결 할 수 있다.또는 재귀로 해결 할 수 있다.스택 방식 동작 과정탐색 시작 노드를 스택에 삽입하고 방문 배열에 방문 했다고 표시한다.스택의 최상단 노드에 방문 하지 않은 인접 노드가 있으면 해당 노드를 스택에 넣고 방문 처리를 한다.만약 방문하지 않은..

공부/CS 공부 2023.01.11