본문 바로가기

개발공부/Python알고리즘12

[Python] SQRT Decomposition(제곱근 분할법) 설명 및 구현 (백준14438, 2042) 이번 포스팅에서는 SQRT Decomposition(제곱근 분할법)의 개념과 Python Code를 설명합니다. Code만 참고하실 분은 포스팅 가장 아랫부분으로 내려가시면 됩니다. SQRT Decomposition(제곱근 분할법, 평방분할법) 알고리즘 SQRT Decomposition은 구간에서 최소값, 최대값, 구간합 등을 구할 때 가장 기본적으로 사용되는 알고리즘입니다. 전체 크기가 N인 구간에서 N을 전부 다 탐색하는 것이 아니라, ROOT(N) 번만 탐색하여 시간을 줄일 수 있습니다. 크기가 N인 배열이 주어졌을때, 아래와 같은 연산을 수행하는 문제를 생각해 보겠습니다. - 1) 구간 l,r ( l ≤ r )을 주고 l ~ r 사이 배열의 최소값(min( A[l], A[l+1],... , A[r.. 2023. 9. 26.
[Python] 이분탐색 bisect 라이브러리 사용법 코드 bisect 라이브러리는 파이썬에서 이진탐색을 쉽게 구현하게 해 주는 라이브러리입니다. 알고리즘 시험에서 탐색 문제를 해결하기위해 이분탐색을 사용하는 경우가 많은데, 이분 탐색을 직접 구현하지 않고 라이브러리 만으로 수행할 수 있습니다. bisect 라이브러리 ✔️ bisect_left( x, i ) : 정렬된 배열 x에서 정렬 순서를 유지한 상태로 값 i를 삽입할 가장 왼쪽 인덱스 반환 ✔️ bisect_right( x, i ) : 정렬된 배열 x에서 정렬 순서를 유지한 상태로 값 i를 삽입할 가장 오른쪽 인덱스 반환 예제 1 x = [1, 2, 3, 3, 3, 4, 5, 6]인 정렬된 배열이 있습니다. 이때 배열 x에 정렬된 상태 그대로 3이라는 숫자를 삽입하는 문제를 생각해 보겠습니다. 이분 탐색 .. 2023. 6. 6.
[Python] 바이너리 인덱스 트리(BIT, 펜윅 트리) 구현 바이너리 인덱스 트리( BIT, 펜윅트리 ) [Python] Segment Tree(세그먼트 트리) 설명 및 구현(백준 2042번) 이번 포스팅에서는 Segment Tree(세그먼트 트리)의 개념과 Python Code를 설명합니다. Code만 참고하실 분은 포스팅 가장 아랫부분으로 내려가시면 됩니다. Segment Tree(세그먼트 트리, 구간트리) 알고리즘 won-developer-log.tistory.com 앞서 소개한 세그먼트 트리( Segment Tree )와 비슷한 역할을 하는 Tree가 또 하나 있습니다. 바로 바이너리 인덱스 트리입니다. BIT, 펜윅 트리라고도 불리는 데요, BIT는 Segment Tree에 비해 작은 메모리를 사용합니다. 이를 위해 어떤 수 X를 이진수로 표기했을 때 마.. 2023. 6. 4.
[Python] Segment Tree(세그먼트 트리) 설명 및 구현(백준 2042번) 이번 포스팅에서는 Segment Tree(세그먼트 트리)의 개념과 Python Code를 설명합니다. Code만 참고하실 분은 포스팅 가장 아랫부분으로 내려가시면 됩니다. Segment Tree(세그먼트 트리, 구간트리) 알고리즘 세그먼트 트리는 배열에서 구간 사이의 합을 구하거나 i번째 값을 바꾸는 문제에서 주로 이용됩니다. 아래와 같은 상황을 생각해 보겠습니다. ( 배열A가 주어짐 ) - 1) 구간 l,r ( l ≤ r )을 주고 l ~ r 사이 배열의 합( A[l] + A[l+1] + ... + A[r-1] + A[r] 값을 구하라 - 2) 배열 A에서 i번째 값을 v로 바꾸기. ( A[i] = v 위 연산을 for문 만을 이용해 푼다면 합을 구하는데 O(N)이, M회 연산을 수행하면 O(NM) 시.. 2023. 6. 4.