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 |
31 |
Tags
- python
- dfs
- 개발브로그
- 스택/큐
- typescript
- javascirpt
- pymodbus
- frontend
- data platform
- configfile
- 프로그래머스
- summerwintercoding
- modbus
- set활용
- javascript
- queue
- Stack
- Algorithm
- InfluxDB
- 알고리즘
- Two Pointer
- 1844
- React
- 파이썬
- algorhtim
- 42587
- 좌표이동
- DP
- 코딩테스트
- 완전탐색
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 |