18강 / 20강
졸업 작품 — 미로를 탈출하는 프로그램
지금까지 배운 것을 전부 한자리에
드디어 종합입니다. 미로에서 출구까지 가장 짧은 길을 찾는 프로그램을 만듭니다. 이 하나의 문제에 지금까지 배운 자료구조가 거의 다 들어갑니다.
| 쓰이는 것 | 어디에 | 배운 곳 |
|---|---|---|
| 2차원 리스트 | 미로 지도 그 자체 | 2강 |
| 튜플 | 좌표 (행, 열) — 딕셔너리 열쇠로 써야 하니까 | 4강 |
| 집합 | 이미 가 본 칸 표시 | 4강 |
| 딕셔너리 | 각 칸의 직전 칸 기록 → 경로 복원 | 5강 |
| 큐 (deque) | BFS — 다음에 갈 칸들의 대기열 | 7강 |
| 스택 | DFS 비교용, 경로 되짚기 | 6강 |
| 그래프 탐색 | 알고리즘 본체 | 15강 |
🎮 미로를 직접 그리고 풀어 보세요
칸을 클릭해 벽을 세우고, 출발·도착을 옮긴 뒤 BFS와 DFS를 각각 눌러 보세요. 방문한 칸 수와 찾은 경로의 길이가 어떻게 다른지가 핵심입니다.
① 미로를 자료로 표현하기
격자는 리스트 안의 리스트입니다. 0은 길, 1은 벽.
좌표는 (행, 열) 튜플로 다룹니다 — 집합과 딕셔너리에 넣어야 하니까요.
미로를 그려 봅니다. 0을 1로 바꿔 벽을 세워 보세요.
Python
브라우저에서 실행
② BFS로 최단 경로 찾기
15강에서 배운 그대로입니다. 큐에서 꺼내고, 상하좌우 이웃을 담고, 본 곳은 표시하고. 여기에 부모 딕셔너리를 하나 더해서, 도착한 뒤 거꾸로 되짚어 경로를 복원합니다.
BFS 본체. 큐 · 집합 · 딕셔너리가 한자리에 모입니다.
Python
브라우저에서 실행
🟩 찾은 경로, 🟨 살펴봤지만 안 쓴 칸. 둘을 비교해 보세요.
Python
브라우저에서 실행
③ 더 해 볼 것
- 대각선 이동을 허용해 보세요 —
이웃들의 방향 목록에 4개를 더하면 됩니다. - 칸마다 이동 비용이 다르다면? (모래는 3초, 길은 1초) 큐 대신 힙(12강)을 쓰면 다익스트라 알고리즘이 됩니다.
- 미로를 자동 생성해 보세요 — DFS로 벽을 뚫으며 다니면 미로가 만들어집니다.
미로 생성기. 6강의 스택이 여기서도 주인공입니다.
Python
브라우저에서 실행
🤔 확인 문제
미로에서 좌표를 튜플
(행, 열) 로 다루는 이유는?해설 "이미 가 본 칸" 집합과 "직전 칸" 딕셔너리에 좌표를 넣어야 합니다. 리스트는 열쇠가 될 수 없어요 (5강·13강).
🤔 확인 문제
BFS로 도착점에 닿은 뒤 경로를 알아내는 방법은?
해설 BFS는 도착 여부와 거리만 알려 줍니다. 부모 딕셔너리를 남겨 두고 도착점 → 출발점으로 되짚은 뒤 뒤집으면 경로가 나와요.
🤔 확인 문제
같은 미로를 BFS와 DFS로 각각 풀었을 때 확실히 말할 수 있는 것은?
해설 BFS만 최단을 보장합니다. 살펴본 칸 수는 미로 모양에 따라 달라서 어느 쪽이 적다고 단정할 수 없어요.