본문 바로가기

코테 공부 🔥71

[알고리즘/Python] 플로이드-워셜(Floyd-Warshall) 알고리즘 1. 플로이드-워셜(Floyd-Warshall) 알고리즘이란? 모든 최단 경로를 구하는 알고리즘 다익스트라 알고리즘과는 다르게 음의 간선도 사용할 수 있다. 2. 동작방식 모든 노드간의 최단거리를 구하는 것이므로 2차원 인접 행렬을 구성한다. 각 경로의 중간 노드를 선택하여, 거리를 더 짧게 줄이는 과정을 반복한다. 초기 그래프를 인접형렬로 나타내면 아래와 같다. INF는 해당 노드에서 특정노드까지 가는 길이 없음을 의미한다. 시작/끝 0 1 2 3 0 0 5 INF 1 1 INF 0 7 2 2 3 INF 0 INF 3 INF INF 6 0 1) 1번 노드를 중간 노드로 설정할 경우 ① 값이 변경될 경우 dist[0][2] = min(dist[0][2], dist[0][1] + dist[1][2]) = .. 2023. 4. 1.
[백준/파이썬] 1956 : 운동 https://www.acmicpc.net/problem/1956 1956번: 운동첫째 줄에 V와 E가 빈칸을 사이에 두고 주어진다. (2 ≤ V ≤ 400, 0 ≤ E ≤ V(V-1)) 다음 E개의 줄에는 각각 세 개의 정수 a, b, c가 주어진다. a번 마을에서 b번 마을로 가는 거리가 c인 도로가 있다는 의www.acmicpc.net문제 요약 : V개의 마을과 E개의 일방 통행 도로가 있다. 최소 사이클의 도로 길이 합을 출력하라. 불가능할 경우에는 -1을 출력하라. 다 풀어놓고 한참을 고생했다. 알고보니, INF값을 나름대로 큰 값을 준다고 변수들의 값을 참고해서 지정했는데, 거기부터 잘못된 시도였다.. V의 범위가 0부터 400사이였고, E의 범위가 V 보다 작거나 같았기 때문에 INF를 50.. 2023. 4. 1.
[백준/파이썬] 17427 : 약수의 합 2 https://www.acmicpc.net/problem/17427 17427번: 약수의 합 2 두 자연수 A와 B가 있을 때, A = BC를 만족하는 자연수 C를 A의 약수라고 한다. 예를 들어, 2의 약수는 1, 2가 있고, 24의 약수는 1, 2, 3, 4, 6, 8, 12, 24가 있다. 자연수 A의 약수의 합은 A의 모든 약수를 더 www.acmicpc.net 문제 요약 : 자연수 A의 약수의 합은 f(A)이다. x보다 작거나 같은 모든 자연수 y의 f(y)값을 더한 값은 g(x)이다. 자연수 N이 주어졌을 때, g(N)을 구하라. 시도 ) # 약수의 합2 import sys input = sys.stdin.readline ans = 0 for number in range(1,int(input(.. 2023. 3. 27.
[자료구조/Python] 세그먼트 트리(Segment Tree) 세그먼트 트리(Segment Tree) 구간 합, 최소값, 최대값 등의 쿼리를 빠르게 처리하기 위해 사용되는 자료구조 이진 트리(binary tree)를 기반으로 하며, 각 노드는 해당 구간의 합, 최소값, 최대값 등의 값을 저장한다. 1. 구성 기본 배열을 이용하여 세그먼트 트리를 초기화, 배열의 각 요소가 세그먼트 트리의 각 리프 노드에 대응된다. 이진 트리의 성질을 이용하여, 각 노드가 나타내는 구간을 두 개의 서브트리로 나눈다. 각 노드에 대해, 해당 구간의 합, 최소값, 최대값 등의 값을 계산하여 저장한다. 각 쿼리에 대해, 세그먼트 트리를 탐색하여 필요한 값을 계산한다. 리프 노드 : 배열의 그 수 자체 다른 노드 : 왼쪽 자식과 오른쪽 자식의 합을 저장 2. 시간 복잡도 트리의 높이가 log.. 2023. 3. 24.
[알고리즘/Python] 분할 정복(Divide and Conquer) 1. 분할 정복(Divide and Conquer)이란? 큰 문제를 작은 부분 문제로 분할하고, 각각의 작은 부분 문제를 해결하여 전체 문제의 해답을 구하는 알고리즘 문제의 크기가 커서 직접적인 해결이 어려운 경우 유용하다. 대표적인 예로, 정렬 알고리즘인 병합 정렬(Merge Sort)과 퀵 정렬(Quick Sort)이 있다. 2. 동작 방식 문제를 작은 부분 문제들로 분할한다. 분할된 부분 문제들을 각각 재귀적으로 해결한다. 부분 문제들의 해답을 결합하여 전체 문제의 해답을 얻는다. 3. 시간 복잡도 시간 복잡도는 일반적으로 부분 문제의 개수, 분할된 문제의 크기, 분할과정의 복잡도에 따라 결정된다. 대부분의 경우, 분할 정복 알고리즘은 재귀적인 방법으로 문제를 해결하므로, 재귀 호출의 깊이에 따라 .. 2023. 3. 24.