알고리즘/알고리즘 개념

알고리즘/알고리즘 개념

BFS

1️⃣ 매개변수로는 그래프와 시작점 받기 def bfs(graph, start):​ 2️⃣ deque() 활용하여 queue 생성 queue = deque() 3️⃣ 시작점 방문하고 큐에 시작 인덱스 추가 visited[start] = True queue.append(start) 4️⃣ queue가 빌때까지 반복 큐에서 가장 먼저 들어갔던 인덱스 꺼내서, 해당 인덱스와 연결된 노드 순회 while queue: cur = queue.popleft() for node in graph[cur]: 5️⃣ 만약 노드를 방문하지 않았다면, 방문하고 큐에 해당 노드 인덱스 추가 if not visited[node]: visited[node] = True queue.append(node)

알고리즘/알고리즘 개념

이분탐색

1️⃣ left right 설정하기 2️⃣ while True 반복, mid 설정 while True: mid = (left+right)//2 3️⃣ mid 값을 이용하여 주어진 조건에 만족하는지 체크하기 위한 값 구하기 count = 0 for line in lines: count += line//mid 4️⃣ left > right 면 반복 끝내고 값 출력 if left > right: print(mid) break 5️⃣ 주어진 조건 만족에 따라 left와 right 값을 조절한다 if count < n: right = mid - 1 else: left = mid + 1 예시 문제 BOJ 1654

알고리즘/알고리즘 개념

이항계수 (+페르마의 소정리)

0. 이항계수란 - n개 중 k개를 뽑는 조합의 수 - 이항계수의 성질 1. n개 중에 k개를 뽑는 것과 n개 중에 n-k개를 뽑는 경우의 수는 같다 (뽑지 않을 것을 정하는 것과 뽑을 것을 정하는 것은 같다) 2. n-1개 중에 k개를 뽑는 경우의 수와(1개 포함X) n-1개 중에 k-1개를 뽑는 경우의 수(1개 포함O)를 더하면 n개 중에 k개를 뽑는 경우의 수이다 3. nC0부터 nCn까지의 합은 2^n 이다 1. 분할정복을 이용한 이항계수 구하기 1.1 알고리즘 진행과정 0️⃣ nC0 혹은 nCn 은 항상 1이다 1️⃣ 나머지 경우는 이항계수의 2번 성질을 활용하여 구현 시간복잡도가 O(n!)이라서 엄청나게 비효율적.. 1.2 코드 def bino(n, k): if k == 0 or n == k:..

알고리즘/알고리즘 개념

플로이드 워셜 알고리즘

0. 플로이드 워셜 알고리즘이란? - 모든 지점에서 다른 모든 지점까지의 최단 경로를 모두 구해야 하는 경우에 사용 - 매 단계마다 현재 노드를 거쳐 가는 노드를 기준으로 알고리즘을 수행 - DP - 최단 거리 정보 저장 1. 알고리즘 진행과정 0️⃣ 초기 거리 테이블 설정 - 연결되지 않은 간선에는 무한대 - 자기 자신은 0 - 이외 간선들은 주어지는 거리 1️⃣ N번 돌면서 현재 노드 선택 >> 현재 노드를 거쳐서 지나가는 모든 경우를 고려 2️⃣ N^2번 돌면서 현재 노드를 거쳐 가는 모든 경로 순회 3️⃣ 원래 기록된 거리보다 현재 노드를 거쳐서 지나가는 거리가 더 짧다면 갱신 (직접 연결된 간선은 업데이트 X) -> O(N^3)의 시간복잡도를 가진다 2. 점화식 D[i][j] = min(D[i]..

알고리즘/알고리즘 개념

슈트라센 알고리즘

0. 행렬 곱셈 방법 아이패드 있을때 추가하기.. n * m 행렬과 m* k 행렬의 곱! 1. General Solution 1.1 브루트포스 # 일반적인 3중 반복문 행렬 곱셈 answer = [[0 for _ in range(k)] for _ in range(n)] for f in range(n): for s in range(k): for j in range(m): answer[f][s] += a[f][j] * b[j][s] 1️⃣ n번 반복하면서 첫번째 행렬의 행을 순회한다 2️⃣ k번 반복하면서 두번째 행렬의 열을 순회한다 3️⃣ m번 반복하면서 곱셈을 진행한다 ➡️ Θ(n^3)의 시간복잡도를 가진다 1.2 분할정복 8번의 곱셈이 필요하다 8번의 덧셈이 필요하다 ➡️ Θ(n^3)의 시간복잡도를 가..

알고리즘/알고리즘 개념

유클리드 호제법

0. MOD 연산이란? 두 값을 나눈 나머지를 구하는 연산이다!! ex) 10 MOD 4 = 2 // 10 % 4 = 2 1. 유클리드 호제법 요약 1️⃣ a % b 수행, 결과값 c(나머지) 2️⃣ b % c 수행 3️⃣ 2️⃣ 반복, 나머지가 0이 되면 그 연산의 나누는 수(작은 수)를 최대공약수로 선택 분명 이산에서 배운건데 까먹었다.. 기억해두자 백준 1934 1850 1033 2. 확장 유클리드 호제법

햄oOoOo
'알고리즘/알고리즘 개념' 카테고리의 글 목록