새발블로그
디버깅 Tip 본문
디버깅의 핵심
디버깅의 목적은 코드가 실제로 어떻게 동작하고 있는지 이해하는 것
- 특정 시점에 변수 값이 어떻게 변하고 있는지
- 어떤 조건에서 코드의 흐름이 바뀌는지
- 어느 부분에서 예상과 다른 결과가 나오는지
이러한 점들을 파악하기 위해 출력문을 적절한 위치에 추가하는 방식이 효과적..
디버깅을 효과적으로 하는 방법
- 문제가 생긴 부분부터 출력해 보기
- 예상과 다르게 동작하는 지점에 System.out.println() 등을 추가해 직접 확인
- 변수의 변화 과정을 추적
- 모든 값을 출력할 필요는 없고, 문제 해결에 필요한 값만 선별적으로 확인
BFS에서 디버깅 적용하기
디버깅 포인트
- 큐(queue)의 현재 상태
- 현재 방문 중인 노드
- 다음에 방문할 예정인 노드
- 방문한 노드 목록
public static void bfs(Map<Integer, List<Integer>> graph, int startVertex) {
Queue<Integer> queue = new LinkedList<>();
Set<Integer> visited = new HashSet<>();
queue.add(startVertex);
visited.add(startVertex);
while (!queue.isEmpty()) {
System.out.println("현재 큐 상태: " + queue); // 디버깅
int curVertex = queue.remove();
System.out.println("현재 방문 노드: " + curVertex); // 디버깅
for (int nextVertex : graph.getOrDefault(curVertex, Collections.emptyList())) {
if (!visited.contains(nextVertex)) {
System.out.println("다음 방문 예정 노드: " + nextVertex); // 디버깅
queue.add(nextVertex);
visited.add(nextVertex);
System.out.println("방문 상태: " + visited); // 디버깅
}
}
}
}
예시 입력 및 출력
Map<Integer, List<Integer>> graph = new HashMap<>();
graph.put(0, List.of(1, 3, 6));
graph.put(1, List.of(0, 3));
graph.put(2, List.of(3));
graph.put(3, List.of(0, 1, 2, 7));
graph.put(4, List.of(5));
graph.put(5, List.of(4, 6, 7));
graph.put(6, List.of(0, 5));
graph.put(7, List.of(3, 5));
bfs(graph, 0);
// 출력 예시 일부
현재 큐 상태: [0]
현재 방문 노드: 0
다음 방문 예정 노드: 1
방문 상태: [0, 1]
다음 방문 예정 노드: 3
방문 상태: [0, 1, 3]
다음 방문 예정 노드: 6
방문 상태: [0, 1, 3, 6]
...
DFS에서 디버깅 적용하기
재귀 깊이를 추적하여 출력에 들여쓰기를 추가하면 흐름을 시각적으로 이해하기 쉬워진다.
DFS 구현 및 디버깅 코드
private static int depth = 0;
public static void dfs(Map<Integer, List<Integer>> graph, int curVertex, Set<Integer> visited) {
visited.add(curVertex);
System.out.println(" ".repeat(depth) + "ㄴ" + curVertex); // 들여쓰기 출력
depth++; // 깊이 증가
for (int nextVertex : graph.getOrDefault(curVertex, Collections.emptyList())) {
if (!visited.contains(nextVertex)) {
dfs(graph, nextVertex, visited);
}
}
depth--; // 깊이 감소
}
예시 입력 및 출력
Map<Integer, List<Integer>> graph = new HashMap<>();
graph.put(0, List.of(1, 3, 6));
graph.put(1, List.of(0, 3));
graph.put(2, List.of(3));
graph.put(3, List.of(0, 1, 2, 7));
graph.put(4, List.of(5));
graph.put(5, List.of(4, 6, 7));
graph.put(6, List.of(0, 5));
graph.put(7, List.of(3, 5));
Set<Integer> visited = new HashSet<>();
dfs(graph, 3, visited);
ㄴ3
ㄴ0
ㄴ1
ㄴ6
ㄴ5
ㄴ4
ㄴ7
ㄴ2
'Problem Solving > Refer' 카테고리의 다른 글
| 암시적 그래프 dfs 템플릿 (0) | 2025.07.04 |
|---|---|
| 암시적 그래프 bfs 템플릿 (0) | 2025.07.04 |
| 연결된 영역 개수 찾는 유형 (0) | 2025.07.04 |
| BFS 템플릿 (0) | 2025.07.04 |
| DFS 템플릿 (0) | 2025.07.04 |