Skip to content

Commit 931d642

Browse files
committed
fix: 글에 잘못된 오타 수정
1 parent b09cafe commit 931d642

2 files changed

Lines changed: 32 additions & 33 deletions

File tree

_posts/algorithm/2025-09-01-Topological-Sort.md

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,39 +9,41 @@ tags:
99
- math
1010
---
1111

12-
위상 정렬(Topological Sort)은 방향성 비순환 그래프(Directed Acyclic Graph, DAG)에 대해 정점들을 정렬하는 알고리즘입니다.
12+
위상 정렬(Topological Sort)은 방향성 비순환 그래프(Directed Acyclic Graph, DAG)에 대해 정점들을 정렬하는 알고리즘입니다.
1313

1414
<br>
1515

16-
DAG는 모든 정점에서 시작하여 다른 정점으로 이동할 수 있지만, 어떤 정점에서 시작해서 다른 정점으로 이동할 때 순환이 발생하지 않는 그래프를 의미합니다.
16+
DAG는 모든 정점에서 시작하여 다른 정점으로 이동할 수 있지만, 어떤 정점에서 시작해서 다른 정점으로 이동할 때 순환이 발생하지 않는 그래프를 의미한다.
17+
18+
그리고, 위상정렬에서 가장 중요한 부분 중 하나는 진입차수이다.
1719

1820
<br>
1921

20-
**위상 정렬의 핵심**
22+
진입차수란, 그래프에서 어떤 노드로 진입하는 간선들의 수이다. 위상 정렬에서는 이런 진입차수가 0인걸 큐에 넣어 탐색하는 형식으로 진행된다.
2123

22-
DAG의 정점들을 순서대로 나열했을 때, 모든 간선이 왼쪽 정점에서 오른쪽 정점으로 향하도록 하는 순서입니다. 즉, 각 정점 u에 대해, u에서 v로 가는 간선이 있다면, u는 v보다 먼저 정렬되어야 합니다.(의존성에 맞게 정렬)
24+
<br>
2325

26+
**위상 정렬의 핵심**
2427

28+
DAG의 정점들을 순서대로 나열했을 때, 모든 간선이 왼쪽 정점에서 오른쪽 정점으로 향하도록 하는 순서입니다. 즉, 각 정점 u에 대해, u에서 v로 가는 간선이 있다면, u는 v보다 먼저 정렬되어야 합니다.(의존성에 맞게 정렬)
2529

2630
<br>
2731

2832
**시간 복잡도**
2933

3034
위상 정렬 알고리즘의 시간 복잡도는 사용되는 구현 방식에 따라 달라진다.
3135

32-
33-
| 알고리즘 | 구현 방식 | 시간 복잡도 | 공간 복잡도 | 장점 | 단점 |
34-
|---|---|---|---|---|---|
35-
| **칸 알고리즘 (Kahn's Algorithm)** | BFS (너비 우선 탐색) | O(V + E) | O(V) | 구현 용이, 효율적, 사이클 확인 가능 | 메모리 사용량 증가 가능성 |
36-
| **DFS (Recursive)** | 재귀적인 DFS | O(V + E) | O(V) | 직관적, 메모리 효율적 | 스택 오버플로우 가능성, 구현 복잡 |
37-
| **DFS (Iterative)** | 반복문 + 스택 | O(V + E) | O(V) | 스택 오버플로우 방지, 안전 | 구현 복잡 |
38-
36+
| 알고리즘 | 구현 방식 | 시간 복잡도 | 공간 복잡도 | 장점 | 단점 |
37+
| ---------------------------------- | -------------------- | ----------- | ----------- | ----------------------------------- | --------------------------------- |
38+
| **칸 알고리즘 (Kahn's Algorithm)** | BFS (너비 우선 탐색) | O(V + E) | O(V) | 구현 용이, 효율적, 사이클 확인 가능 | 메모리 사용량 증가 가능성 |
39+
| **DFS (Recursive)** | 재귀적인 DFS | O(V + E) | O(V) | 직관적, 메모리 효율적 | 스택 오버플로우 가능성, 구현 복잡 |
40+
| **DFS (Iterative)** | 반복문 + 스택 | O(V + E) | O(V) | 스택 오버플로우 방지, 안전 | 구현 복잡 |
3941

4042
일반적으로 시간복잡도, 공간 복잡도에는 큰 차이가 없지만, DFS로 구현하는 경우 오버플로우 및 단점이 있어 Kahn's Algorithm 을 많이 사용됩니다.
4143

4244
<br>
4345

44-
위에서 설명한 Kahn's Algorithm의 시간 복잡도는...
46+
위에서 설명한 Kahn's Algorithm의 시간 복잡도는...
4547

4648
- 진입 차수 계산: 그래프의 모든 정점과 간선을 순회해야 하므로 O(V + E) 시간이 소요됩니다.
4749

@@ -51,12 +53,11 @@ DAG의 정점들을 순서대로 나열했을 때, 모든 간선이 왼쪽 정
5153

5254
따라서 전체적인 시간 복잡도는 O(V + E) + O(V) + O(V + E) = O(V + E) 가 됩니다. 이는 그래프의 정점 수와 간선 수에 비례하는 시간 복잡도이므로, 큰 그래프에서도 효율적으로 위상 정렬을 수행할 수 있습니다.
5355

54-
5556
<br>
5657

5758
### 코드 예시 (Kahn's Algorithm)
5859

59-
- [BOJ 1516](https://www.acmicpc.net/problem/1516)
60+
- [BOJ 1516](https://www.acmicpc.net/problem/1516)
6061

6162
```java
6263
import java.util.*;
@@ -69,7 +70,7 @@ public class Main {
6970

7071
public static void main(String[] args) throws IOException {
7172
BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
72-
73+
7374
int N = Integer.parseInt(br.readLine());
7475
ArrayList<ArrayList<Integer>> graph = new ArrayList<>();
7576
int[] indegree = new int[N+1];
@@ -102,7 +103,7 @@ public class Main {
102103

103104
while (!que.isEmpty()) {
104105
int now = que.poll();
105-
106+
106107
for (int j : graph.get(now)) { // 진입차수가 0인 것에서 최대 값을 찾기 위해 반복한다.
107108
result[j] = Math.max(result[j], (result[now] + times[now])); // 문제에 따라서 최소 시간을 계산하는 경우도 있다.
108109
indegree[j]--;
@@ -132,8 +133,7 @@ inDegree : 각 정점의 진입 차수를 저장하는 배열입니다.
132133

133134
<br>
134135

135-
만약 사이클을 검사해야한다면...
136-
사이클 검사: 위상정렬로 인한 나열된 결과 리스트의 크기가 정점 수와 다르면 사이클이 존재함을 의미한다.
136+
만약 사이클을 검사해야한다면... 위상정렬로 이후나열된 결과 리스트의 크기가 정점 수와 다르면 사이클이 존재함을 의미한다.
137137

138138
<br>
139139

@@ -145,6 +145,3 @@ inDegree : 각 정점의 진입 차수를 저장하는 배열입니다.
145145
문제로는 [1005 : ACM Craft](https://www.acmicpc.net/problem/1005), [2056: 작업](https://www.acmicpc.net/problem/2056)을 추천한다.
146146

147147
<br>
148-
149-
150-

_posts/network/2024-02-17-utm-and-machine.md

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,13 @@ tags:
4444

4545
가상의 사설망을 형성해서 인터넷 트래픽을 보호한다. VPN 라우터를 이용하여 망을 완전히 분리하고, 이를 가상화 시킨것이다.
4646

47-
VPN에는 터널링을 이용해서 접속한다는 이야기를 많이 하는데, 터널링이란 라우터에 있는 VPN 프로토콜 중 하나를 이용해서 접속하는 것으로 단말기와 라우터 사이에 연결이 암호화된다. 이 사이 연결 및 기록이 암호화 되기 때문에 보안적으로 이점이있다. 또 이러한 VPN 접속 및 터널링을 위해서는 암호나 키가 필요하기 때문에 해커나 익명의 사용자가 네트워크에 접근하는 것도 막을 수 있다.
47+
VPN에는 터널링을 이용해서 접속한다는 이야기를 많이 하는데, 터널링이란 라우터에 있는 VPN 프로토콜 중 하나를 이용해서 접속하는 것으로 단말기와 라우터 사이에 연결이 암호화된다.
48+
49+
<br>
50+
51+
이 사이 연결 및 기록이 암호화 되기 때문에 보안적으로 이점이있다. 또 이러한 VPN 접속 및 터널링을 위해서는 암호나 키가 필요하기 때문에 해커나 익명의 사용자가 네트워크에 접근하는 것도 막을 수 있다.
52+
53+
<br>
4854

4955
이러한 VPN 프로토콜에는 여러 종류가 있다.
5056

@@ -64,6 +70,8 @@ VPN에는 터널링을 이용해서 접속한다는 이야기를 많이 하는
6470

6571
허가되지 않은 엑세스를 방지하는 역할을 한다.
6672

73+
<br>
74+
6775
방화벽을 이용하면, 악의적인 패킷에 대해서 차단이 가능하다. 단, 방화벽 내부 네트워크와 외부 네트워크 사이의 세션 연결을 위한 패킷 등등 정보를 이용해서 방화벽에서 허용되는 패킷에 악의적인 코드나 요청을 보낼 수 있기 때문에 절대적으로 믿어서는 안된다. 그렇기 때문에 방화벽 이외에 세부적으로 IDS, IPS가 필요한 것이다.
6876

6977
<p align="center">
@@ -73,12 +81,12 @@ VPN에는 터널링을 이용해서 접속한다는 이야기를 많이 하는
7381
<br>
7482
<br>
7583

76-
**IDS(Intrusion Detection System)**
77-
78-
침입 탐지 시스템
84+
**침입 탐지 시스템 : IDS(Intrusion Detection System)**
7985

8086
침입 탐지 시스템은 네트워크 트래픽을 모니터링 하고 트래픽 내용을 분석해서 침입이 있는지 파악하는 시스템이다. 바이러스 등은 방화벽에 막히더라도 허용된 패킷이 악의적인지 파악하는 과정을 거친다. 여기서 탐지만 하고 실질적으로 차단하지는 않는다. 따라서 모니터링은 되지만, 해당 패킷을 차단하기 위해서는 수동으로 작업해야한다.
8187

88+
<br>
89+
8290
패킷을 탐지하는 방식으로는 **시그니처** 패턴을 참고하여 트래픽을 검출한다. 시그니처 패턴은 악성코드를 해시화 한 것으로 이걸 저장해 두고, 트래픽의 내용가 이와 일치하는 지 여부를 통해서 감지한다. 하지만, 문자를 조금만 바꿔도 해시값이 완전히 달라지기 때문에 시간이 지날 수록 저장되는 해시가 많아지고, 해커가 우회하기 쉽기 때문에 이러한 방식도 문제가 되고 있다.
8391

8492
IDS는 주로 방화벽 앞단에 위치한다.
@@ -90,9 +98,7 @@ IDS는 주로 방화벽 앞단에 위치한다.
9098
<br>
9199
<br>
92100

93-
**ISP(Intrusion Prevention System)**
94-
95-
침입 방지 시스템
101+
**침입 방지 시스템 : ISP(Intrusion Prevention System)**
96102

97103
침입 방지 시스템은 악의적인 트래픽이 검출되면, 해당 패킷을 차단하거나 세션을 끊어 방어하는 역할을 한다. IDS와 마찬가지로 패킷을 분석하고, 이를 모니터링 할 수 있다. 하지만, 과도한 오탐으로 인해 오히려 서비스를 못하는 곳도 있다고 한다...
98104

@@ -114,8 +120,6 @@ PC의 악성 코드등을 탐지하고 이를 차단, 제거하는 기능을 말
114120

115121
**DMZ(DeMilitarized Zone)**
116122

117-
비무장 지대
118-
119123
뭔가 익숙한 용어... DMZ이다. 네트워크에서 DMZ는 주로 기업에서 네트워크를 나누는 기준에서 나오는데, 기업 사내에서 쓰는 내부 네트워크, 외부 네트워크, 마지막으로 DMZ가 존재한다. DMZ는 내부, 외부 네트워크와 분리된 네트워크로 주로 내부 네트워크와 외부 네트워크 사이를 중개한다. 즉, 내부 - 외부가 직접적으로 통신할 수 없고, DMZ에 있는 공개 서버를 통해서만 통신이 가능하다는 이야기 이다.
120124

121125
<p align="center">
@@ -129,9 +133,7 @@ PC의 악성 코드등을 탐지하고 이를 차단, 제거하는 기능을 말
129133

130134
## 기타 장치
131135

132-
**USP(Uninterruptible Power Supply system)**
133-
134-
무정전 전원 장치
136+
**무정전 전원 장치 : USP(Uninterruptible Power Supply system)**
135137

136138
USP는 정전이나 전력공급에 이상이 생겼을 때 일정 시간 만큼 전력을 공급할 수 있는 장치이다. 비상 전력 배터리와 동일한 기능을 한다. 주로 핵심적인 서비스에 연결을 해둔다. 이러한 USP는 타입이 있는데, 전원 공급을 정류하는 기능, 비상시 전력 저장 배터리, 전압을 바꾸는 인버터 등 여러 타입이 있다.
137139

0 commit comments

Comments
 (0)