Skip to content

Commit 18d28ad

Browse files
committed
.
1 parent 5acf352 commit 18d28ad

77 files changed

Lines changed: 5493 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

code/templates/algorithm-architect/github-pages-docs/.pw-runtime/package-lock.json

Lines changed: 1310 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"dependencies": {
3+
"marked": "^17.0.3",
4+
"mermaid": "^11.12.3",
5+
"playwright": "^1.58.2"
6+
}
7+
}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
# BFS (너비 우선 탐색) - GitHub Pages 해설
2+
3+
## 문서 목적
4+
- 원본 템플릿 `01-graph/01-bfs.md` 의 내부 동작을 GitHub Markdown에서 바로 읽을 수 있게 설명합니다.
5+
- 코드 레이어(초기화/루프/조건/갱신/종료)를 분해하고, Mermaid로 제어 흐름을 시각화합니다.
6+
- 실전 문제에 붙일 때 반드시 수정해야 하는 지점을 체크리스트로 제공합니다.
7+
8+
## 원본 템플릿
9+
- Source: [01-graph/01-bfs.md](../../01-graph/01-bfs.md)
10+
11+
## 내부 메커니즘 (Flow)
12+
```mermaid
13+
flowchart TD
14+
A[Start Node enqueue] --> B[Queue pop left]
15+
B --> C{Target found}
16+
C -- Yes --> D[Return result]
17+
C -- No --> E[Visit neighbors]
18+
E --> F{Unvisited}
19+
F -- Yes --> G[Mark visited and enqueue]
20+
F -- No --> H[Skip]
21+
G --> I{Queue empty}
22+
H --> I
23+
I -- No --> B
24+
I -- Yes --> J[End not found]
25+
```
26+
27+
## 내부 상호작용 (Sequence)
28+
```mermaid
29+
sequenceDiagram
30+
participant Q as Queue
31+
participant V as Visited
32+
participant G as Graph
33+
Q->>Q: push start
34+
loop while queue not empty
35+
Q->>Q: pop
36+
Q->>G: get neighbors
37+
G-->>Q: neighbor list
38+
Q->>V: check visited
39+
V-->>Q: true false
40+
Q->>Q: push unvisited
41+
end
42+
```
43+
44+
## 핵심 코드
45+
```python
46+
# [BFS 템플릿: 아키텍트 버전]
47+
# Use Case: 최단 거리, 최소 이동 횟수, 레벨별 탐색
48+
# Components: Queue (FIFO), Visited Set
49+
# Constraint: 큐에 넣을 때 방문 처리 필수 (중복 방지)
50+
51+
def bfs(start_node, graph, target=None):
52+
# 1. 초기화 (Initialization Layer)
53+
# - 큐 생성, 시작점 삽입, 방문 처리
54+
queue = [start_node]
55+
visited = {start_node}
56+
57+
# 2. 메인 루프 (Process Loop)
58+
# - 큐가 빌 때까지 반복
59+
while queue:
60+
current = queue.pop(0)
61+
62+
# 3. 비즈니스 로직 (Core Logic)
63+
# - (필요하다면) 여기서 정답 체크 혹은 데이터 가공
64+
if target and current == target:
65+
return current
66+
67+
# 4. 확장 로직 (Expansion Layer)
68+
# - 연결된 노드 탐색 및 조건 필터링
69+
for neighbor in graph[current]:
70+
if neighbor not in visited:
71+
visited.add(neighbor)
72+
queue.append(neighbor)
73+
74+
return None # 탐색 실패
75+
```
76+
77+
## 코드 레이어 해설
78+
- **Initialization**: 상태 테이블/포인터/큐/스택/부모 배열 등 탐색의 기준 상태를 만든다.
79+
- **Process Loop / Recursion**: 입력 공간을 순회하며 상태 전이를 반복한다.
80+
- **Decision Rule**: 분기 조건(완화 가능 여부, 유효 선택 여부, 종료 조건)을 적용한다.
81+
- **State Update**: 거리/DP/집합/결과 배열을 갱신하고 다음 단계로 전달한다.
82+
- **Termination**: 목표 도달, 범위 소진, 큐/스택 고갈, 사이클 검출 등으로 종료한다.
83+
84+
## 실전 적용 체크리스트
85+
- 입력 자료구조 형식(인접 리스트, 간선 리스트, 정렬 여부, 1-index/0-index)을 먼저 고정한다.
86+
- 시간 복잡도 한계에 맞게 자료구조를 교체한다 (`list.pop(0)` -> `deque.popleft` 등).
87+
- 실패/예외 경로를 명시한다 (도달 불가, 음수 사이클, 빈 결과, 사이클 존재).
88+
- 테스트는 최소 3개: 정상 케이스, 경계 케이스, 반례 케이스를 포함한다.
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
# DFS (깊이 우선 탐색) - GitHub Pages 해설
2+
3+
## 문서 목적
4+
- 원본 템플릿 `01-graph/02-dfs.md` 의 내부 동작을 GitHub Markdown에서 바로 읽을 수 있게 설명합니다.
5+
- 코드 레이어(초기화/루프/조건/갱신/종료)를 분해하고, Mermaid로 제어 흐름을 시각화합니다.
6+
- 실전 문제에 붙일 때 반드시 수정해야 하는 지점을 체크리스트로 제공합니다.
7+
8+
## 원본 템플릿
9+
- Source: [01-graph/02-dfs.md](../../01-graph/02-dfs.md)
10+
11+
## 내부 메커니즘 (Flow)
12+
```mermaid
13+
flowchart TD
14+
A[Enter node] --> B[Mark visited]
15+
B --> C{Target}
16+
C -- Yes --> D[Return success]
17+
C -- No --> E[Iterate neighbors]
18+
E --> F{Neighbor unvisited}
19+
F -- Yes --> G[Recursive call push stack]
20+
F -- No --> H[Continue]
21+
G --> I{Need backtrack}
22+
I -- Yes --> J[Unchoose state]
23+
I -- No --> E
24+
J --> E
25+
H --> E
26+
```
27+
28+
## 내부 상호작용 (Sequence)
29+
```mermaid
30+
sequenceDiagram
31+
participant Caller
32+
participant DFS
33+
participant Stack
34+
Caller->>DFS: dfs start
35+
DFS->>DFS: visit node
36+
DFS->>Stack: explore neighbor
37+
Stack->>DFS: return to parent
38+
DFS-->>Caller: found not found
39+
```
40+
41+
## 핵심 코드
42+
```python
43+
# [DFS 템플릿: 아키텍트 버전]
44+
# Use Case: 경로 탐색, 사이클 검출, 연결 요소 찾기
45+
# Components: Stack (LIFO) 또는 재귀
46+
# Constraint: 백트래킹 시 방문 해제 필요한 경우 있음
47+
48+
# [DFS 재귀 버전]
49+
def dfs_recursive(node, graph, visited=None, target=None):
50+
# 1. 초기화 (Initialization Layer)
51+
# - 방문 집합 생성 (최초 호출 시)
52+
if visited is None:
53+
visited = set()
54+
55+
# 2. 방문 처리 (Visit Layer)
56+
visited.add(node)
57+
58+
# 3. 비즈니스 로직 (Core Logic)
59+
# - 목표 발견 시 조기 종료
60+
if target and node == target:
61+
return True
62+
63+
# 4. 재귀 확장 (Recursive Expansion)
64+
# - 인접 노드로 깊이 우선 탐색
65+
for neighbor in graph[node]:
66+
if neighbor not in visited:
67+
if dfs_recursive(neighbor, graph, visited, target):
68+
return True
69+
70+
return False
71+
```
72+
73+
## 코드 레이어 해설
74+
- **Initialization**: 상태 테이블/포인터/큐/스택/부모 배열 등 탐색의 기준 상태를 만든다.
75+
- **Process Loop / Recursion**: 입력 공간을 순회하며 상태 전이를 반복한다.
76+
- **Decision Rule**: 분기 조건(완화 가능 여부, 유효 선택 여부, 종료 조건)을 적용한다.
77+
- **State Update**: 거리/DP/집합/결과 배열을 갱신하고 다음 단계로 전달한다.
78+
- **Termination**: 목표 도달, 범위 소진, 큐/스택 고갈, 사이클 검출 등으로 종료한다.
79+
80+
## 실전 적용 체크리스트
81+
- 입력 자료구조 형식(인접 리스트, 간선 리스트, 정렬 여부, 1-index/0-index)을 먼저 고정한다.
82+
- 시간 복잡도 한계에 맞게 자료구조를 교체한다 (`list.pop(0)` -> `deque.popleft` 등).
83+
- 실패/예외 경로를 명시한다 (도달 불가, 음수 사이클, 빈 결과, 사이클 존재).
84+
- 테스트는 최소 3개: 정상 케이스, 경계 케이스, 반례 케이스를 포함한다.
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
# 다익스트라 (Dijkstra) - GitHub Pages 해설
2+
3+
## 문서 목적
4+
- 원본 템플릿 `01-graph/03-dijkstra.md` 의 내부 동작을 GitHub Markdown에서 바로 읽을 수 있게 설명합니다.
5+
- 코드 레이어(초기화/루프/조건/갱신/종료)를 분해하고, Mermaid로 제어 흐름을 시각화합니다.
6+
- 실전 문제에 붙일 때 반드시 수정해야 하는 지점을 체크리스트로 제공합니다.
7+
8+
## 원본 템플릿
9+
- Source: [01-graph/03-dijkstra.md](../../01-graph/03-dijkstra.md)
10+
11+
## 내부 메커니즘 (Flow)
12+
```mermaid
13+
flowchart TD
14+
A[Init distances INF] --> B[Push start to min heap]
15+
B --> C{Heap empty}
16+
C -- No --> D[Pop shortest node]
17+
D --> E{Stale distance}
18+
E -- Yes --> C
19+
E -- No --> F[Relax outgoing edges]
20+
F --> G{Better distance found}
21+
G -- Yes --> H[Update dist and push heap]
22+
G -- No --> I[Skip]
23+
H --> C
24+
I --> C
25+
C -- Yes --> J[Return distance table]
26+
```
27+
28+
## 내부 상호작용 (Sequence)
29+
```mermaid
30+
sequenceDiagram
31+
participant H as MinHeap
32+
participant D as DistTable
33+
participant G as Graph
34+
H->>H: pop min node
35+
H->>G: neighbors node
36+
G-->>H: neighbor weight
37+
H->>D: compare and relax
38+
D-->>H: updated dist
39+
H->>H: push updated node
40+
```
41+
42+
## 핵심 코드
43+
```python
44+
# [Dijkstra 템플릿: 아키텍트 버전]
45+
# Use Case: 가중치 그래프의 최단 경로
46+
# Components: Priority Queue (Min-Heap), Distance Table
47+
# Constraint: 음수 가중치 불가
48+
49+
import heapq
50+
51+
def dijkstra(start, graph, n):
52+
# 1. 초기화 (Initialization Layer)
53+
# - 거리 테이블 무한대로 초기화
54+
# - 우선순위 큐에 시작점 삽입
55+
INF = float('inf')
56+
distances = [INF] * (n + 1)
57+
distances[start] = 0
58+
pq = [(0, start)] # (거리, 노드)
59+
60+
# 2. 메인 루프 (Process Loop)
61+
# - 우선순위 큐가 빌 때까지
62+
while pq:
63+
current_dist, current_node = heapq.heappop(pq)
64+
65+
# 3. 최적화 레이어 (Optimization Layer)
66+
# - 이미 처리된 노드는 스킵
67+
if current_dist > distances[current_node]:
68+
continue
69+
70+
# 4. 확장 로직 (Expansion Layer)
71+
# - 인접 노드의 거리 갱신
72+
for neighbor, weight in graph[current_node]:
73+
new_dist = current_dist + weight
74+
75+
# 5. 갱신 조건 (Update Condition)
76+
if new_dist < distances[neighbor]:
77+
distances[neighbor] = new_dist
78+
heapq.heappush(pq, (new_dist, neighbor))
79+
80+
return distances
81+
```
82+
83+
## 코드 레이어 해설
84+
- **Initialization**: 상태 테이블/포인터/큐/스택/부모 배열 등 탐색의 기준 상태를 만든다.
85+
- **Process Loop / Recursion**: 입력 공간을 순회하며 상태 전이를 반복한다.
86+
- **Decision Rule**: 분기 조건(완화 가능 여부, 유효 선택 여부, 종료 조건)을 적용한다.
87+
- **State Update**: 거리/DP/집합/결과 배열을 갱신하고 다음 단계로 전달한다.
88+
- **Termination**: 목표 도달, 범위 소진, 큐/스택 고갈, 사이클 검출 등으로 종료한다.
89+
90+
## 실전 적용 체크리스트
91+
- 입력 자료구조 형식(인접 리스트, 간선 리스트, 정렬 여부, 1-index/0-index)을 먼저 고정한다.
92+
- 시간 복잡도 한계에 맞게 자료구조를 교체한다 (`list.pop(0)` -> `deque.popleft` 등).
93+
- 실패/예외 경로를 명시한다 (도달 불가, 음수 사이클, 빈 결과, 사이클 존재).
94+
- 테스트는 최소 3개: 정상 케이스, 경계 케이스, 반례 케이스를 포함한다.
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
# 벨만-포드 (Bellman-Ford) - GitHub Pages 해설
2+
3+
## 문서 목적
4+
- 원본 템플릿 `01-graph/04-bellman-ford.md` 의 내부 동작을 GitHub Markdown에서 바로 읽을 수 있게 설명합니다.
5+
- 코드 레이어(초기화/루프/조건/갱신/종료)를 분해하고, Mermaid로 제어 흐름을 시각화합니다.
6+
- 실전 문제에 붙일 때 반드시 수정해야 하는 지점을 체크리스트로 제공합니다.
7+
8+
## 원본 템플릿
9+
- Source: [01-graph/04-bellman-ford.md](../../01-graph/04-bellman-ford.md)
10+
11+
## 내부 메커니즘 (Flow)
12+
```mermaid
13+
flowchart TD
14+
A[Initialize dist array] --> B[Repeat V 1 rounds]
15+
B --> C[Scan every edge u v]
16+
C --> D{dist u w dist v}
17+
D -- Yes --> E[Relax dist v]
18+
D -- No --> F[Keep current]
19+
E --> G{More edges}
20+
F --> G
21+
G -- Yes --> C
22+
G -- No --> H[One extra scan]
23+
H --> I{Still relaxes}
24+
I -- Yes --> J[Negative cycle]
25+
I -- No --> K[Return distances]
26+
```
27+
28+
## 내부 상호작용 (Sequence)
29+
```mermaid
30+
sequenceDiagram
31+
participant Lp as V1Loop
32+
participant E as EdgeList
33+
participant D as DistTable
34+
Lp->>E: iterate edges
35+
E->>D: try relax u v w
36+
D-->>Lp: changed or not
37+
Lp->>E: final cycle check
38+
```
39+
40+
## 핵심 코드
41+
```python
42+
# [Bellman-Ford 템플릿: 아키텍트 버전]
43+
# Use Case: 음수 가중치 허용, 음수 사이클 탐지
44+
# Components: Distance Table, Edge List
45+
# Constraint: O(VE) 시간 복잡도 (느림)
46+
47+
def bellman_ford(start, edges, n):
48+
# 1. 초기화 (Initialization Layer)
49+
INF = float('inf')
50+
distances = [INF] * (n + 1)
51+
distances[start] = 0
52+
53+
# 2. 완화 반복 (Relaxation Loop)
54+
# - (V-1)번 반복: 최단 경로는 최대 V-1개의 간선
55+
for i in range(n - 1):
56+
# 3. 간선 순회 (Edge Iteration)
57+
for u, v, weight in edges:
58+
if distances[u] != INF and distances[u] + weight < distances[v]:
59+
distances[v] = distances[u] + weight
60+
61+
# 4. 음수 사이클 검출 (Negative Cycle Detection)
62+
# - 한 번 더 완화가 일어나면 음수 사이클 존재
63+
for u, v, weight in edges:
64+
if distances[u] != INF and distances[u] + weight < distances[v]:
65+
return None # 음수 사이클 존재
66+
67+
return distances
68+
```
69+
70+
## 코드 레이어 해설
71+
- **Initialization**: 상태 테이블/포인터/큐/스택/부모 배열 등 탐색의 기준 상태를 만든다.
72+
- **Process Loop / Recursion**: 입력 공간을 순회하며 상태 전이를 반복한다.
73+
- **Decision Rule**: 분기 조건(완화 가능 여부, 유효 선택 여부, 종료 조건)을 적용한다.
74+
- **State Update**: 거리/DP/집합/결과 배열을 갱신하고 다음 단계로 전달한다.
75+
- **Termination**: 목표 도달, 범위 소진, 큐/스택 고갈, 사이클 검출 등으로 종료한다.
76+
77+
## 실전 적용 체크리스트
78+
- 입력 자료구조 형식(인접 리스트, 간선 리스트, 정렬 여부, 1-index/0-index)을 먼저 고정한다.
79+
- 시간 복잡도 한계에 맞게 자료구조를 교체한다 (`list.pop(0)` -> `deque.popleft` 등).
80+
- 실패/예외 경로를 명시한다 (도달 불가, 음수 사이클, 빈 결과, 사이클 존재).
81+
- 테스트는 최소 3개: 정상 케이스, 경계 케이스, 반례 케이스를 포함한다.

0 commit comments

Comments
 (0)