세그먼트 트리
세그먼트 트리가 필요한 상황 세그먼트 트리는 [1,2,3,4,5,6,7,8,9]와 같은 수열이 있을 때, 주어진 수열의 부분 수열들에서 특정 값(ex. 최댓값, 최솟값, 총 합)을 빠르게 알고 싶을 때 사용하는 자료구조다. 예를 들어, [1,2,3,4,5,6,7,8,9] 수열의 두번째부터 다섯번째까지의 부분수열 총합을 구하면 2 + 3 + 4 + 5 = 14다. 이 값을 구하기 위해서는 두번째부터 다섯번째까지 모두 값을 하나하나 더해야 한다. 부분집합의 길이가 m이라고 한다면 시간복잡도는 O(m). 이러한 연산을 자주 하는 상황이 발생할 때 매번 부분집합의 길이만큼 연산을 하는것은 비효율적이다. 일반적으로 자주 발생하는 연산을 줄이는 방법은 자주 발생하는 연산의 결과를 저장해 놓는것이다. 하지만 n길이의..
더보기
Union-Find
Union-Find 알고리즘 회고 글에서 나열해놓은 순서대로 글을 작성하려 했지만, 오늘 본 코딩테스트에서 Union-Find 문제가 나왔는데 사소한 실수를 끝까지 못찾아 시간을 낭비했다. 그래서 반성하는 의미로 Union-Find를 먼저 정리하려고 한다. Union-Find Union-Find 알고리즘을 사용하는 이유는 매우 간단하다. 요소들을 정해진 규칙에 따라 그룹을 나누었을 때, A 요소와 B 요소가 같은 그룹에 속하는지 쉽게 알기 위한 알고리즘이다. 조금 더 정확히는 그래프 구조에서 같은 그룹에 속하는 지 빠르게 알기위해 필요한 알고리즘이다. GROUP_A = [1,2,3] GROUP_B = [4,5,6] GROUP = { 1:'A', 2:'A', 3:'A', 4:'B', 5:'B', 6:'B'..
더보기