목록Algorithm/Note (4)
Hi
1️⃣ 기본 개념서로소 집합(Disjoint Set) 자료구조를 관리하는 알고리즘이다. 두 가지 연산을 수행한다.Find: 특정 원소가 속한 집합의 대표 원소를 찾는다.Union: 두 원소가 속한 집합을 하나의 새로운 집합으로 통합한다.집합을 트리 구조로 표현하며 트리의 루트 노드가 집합의 대표 원소가 된다. 2️⃣ 시간 복잡도$ O(\alpha(N)) $ 로, N의 크기에 관계없이 매우 빠른 연산이 가능하다$\alpha(N)$은 아커만 함수(Ackermann function)의 역함수이다. 3️⃣ 동작 과정초기화: 모든 원소에 대해 자기 자신을 부모로( $\text{parent}[i] = i$ ) 설정한 N개의 집합을 만든다Find 동작: 원소의 루트를 찾기 위해 $\text{parent}[x]$를 따..
💡 기본 개념최단 경로 알고리즘 중 하나시작 정점에서 모든 정점까지의 최단 거리를 구하는 알고리즘이다.방향그래프와 무방향그래프에서 사용할 수 있다. 💡 시간 복잡도V: 정점 수, E: 간선 수단순 구현 : O(V²)우선순위 큐 사용 : O((V + E) log V)우선순위 큐를 사용하는 것이 더 효율적이기 때문에 대부분의 경우 우선순위 큐를 사용해서 구현한다. 💡 동작 과정방문하지 않은 정점 중 최단 거리가 가장 짧은 정점을 선택해당 정점을 기준으로 인접한 정점들의 거리를 확인하고 더 짧은 경로로 갱신모든 정점을 방문할 때까지 반복 ✅ 동작 예시다음과 같이 가중치가 있는 무방향 그래프에 대해 생각해보자. (0) / \ 2 5 / \(1)---1---(2) \ 9 ..
💡 기본 개념고정된 크기의 윈도우(구간)을 배열이나 문자열 위에서 일정 간격으로 이동시키며 문제를 해결하는 알고리즘 기법이다.윈도우를 이동할 때 전체를 다시 계산하지 않고, 앞 요소는 빼고 새 요소만 더하는 식으로 누적 계산시간복잡도는 O(n)💡 언제 사용할까?고정 길이의 부분 구간에서 최댓값, 최솟값, 합 등을 구할 때투 포인터와 유사하지만, 윈도우 크기를 고정하거나 유동적으로 움직이는 문제에서 효과적이다. ✅ 예시: 고정 크기 부분합 최대값 구하기def max_sum(arr, k): window_sum = sum(arr[:k]) max_sum = window_sum for i in range(k, len(arr)): window_sum += arr[i] - arr[i ..
항상 파이썬으로만 알고리즘을 풀다가 자바스크립트로 풀어봤다!입력 처리부터 에디터 사용 방식까지 많이 달라서 처음 시작하는 방법에 대해 정리해보려고 한다. 💡 input 받기파이썬으로 풀 때 매번 input값을 입력하는 게 귀찮아서 텍스트 파일을 만들어서 썼었다.import syssys.stdin=open('input.txt') 자바스크립트로 풀 때도 이 방법으로 풀면 꽤 편하다.단! 파이썬으로 문제 제출할 때는 해당 코드를 지워야 했었는데 자바스크립트는 코드 수정이 필요하다.const fs = require("fs");// 연습const input = fs.readFileSync("input.txt").toString().trim();// 백준 제출const input = fs.readFileSync(..