Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
Tags
- LLM
- javascirpt
- 알고리즘
- modbus
- rag
- monorepo
- typescript
- queue
- ansible
- VectoreStore
- frontend
- dfs
- build
- React
- Infra
- turbo
- DP
- Two Pointer
- 프로그래머스
- python
- javascript
- BFS
- docker
- heapq
- OpenAI
- CI/CD
- AI
- 파이썬
- jenkins
- Algorithm
Archives
- Today
- Total
DM Log
[BFS] 게임 맵 최단거리 - Python 본문
문제 링크 - https://school.programmers.co.kr/learn/courses/30/lessons/1844
[문제 간단 요약]
1. (0, 0)에서 출발해 (n-1, m-1)까지 이동
2. maps[y][x] = 1은 이동 가능, 0은 벽
3. 최단 거리를 찾아야 하며, 이동은 상하좌우만 가능
4. 도달할 수 없다면 -1 반환
[문제 해결 방안]
1. 탐색 경로 중 가장 짧은 길이를 찾아야 한다는 문제 이므로, 최단거리 알고리즘(BFS) 사용
- 시작점 (0,0)부터 BFS로 인접 노드 탐색
- 벽이 아닌 (maps[y][x] == 1) 좌표만 다음 후보로 추가
- 방문했던 위치는 used[y][x]로 관리
- 목적지 (h-1, w-1)에 도달하면 이동 횟수 반환
- 도달 못할 경우 -1 반환
[문제 해결 코드 - python]
from collections import deque
def solution(maps):
h = len(maps)
w = len(maps[0])
used = [[0]*w for _ in range(h)]
q = deque()
q.append((0, 0, 1)) # 시작 좌표와 거리
used[0][0] = 1
while q:
y, x, cnt = q.popleft()
if y == h - 1 and x == w - 1:
return cnt
for dy, dx in [[0,1], [0,-1], [1,0], [-1,0]]:
ny, nx = y + dy, x + dx
if 0 <= ny < h and 0 <= nx < w:
if used[ny][nx] == 0 and maps[ny][nx] == 1:
used[ny][nx] = 1
q.append((ny, nx, cnt + 1))
return -1
❓ DFS로는 해결 불가능?
=> 최단 거리 문제에서는 DFS가 부적합
'알고리즘 > 프로그래머스' 카테고리의 다른 글
| [완전탐색] 모음사전 - Python / JavaScript (0) | 2025.07.19 |
|---|---|
| [DFS/BFS] 타겟 넘버 - Python / Javascript (1) | 2025.07.15 |
| [연습문제] 롤케이크 자르기- Python / Javascript (0) | 2025.07.14 |
| [스택/큐] 프로세스 - Python / Javascript (0) | 2025.07.13 |
| [해시] 전화번호 목록 - Python / JavaScript (2) | 2025.07.07 |