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
- 파괴되지않은건물
- 알고리즘
- 파이썬
- 프로그래머스
- 징검다리건너기
- javascript
- [1차]캐시
- DP
- 17404
- 큐
- 백준
- DFS
- 최소스패닝트리
- 섬연결하기
- 두큐합같게만들기
- 벽부수고이동하기
- 그래프탐색
- 자물쇠와열쇠
- 도넛과막대그래프
- 다익스트라
- 거리두기확인하기
- 프림알고리즘
- 구현
- 트리의지름
- 사이클게임
- BFS
- RGB거리2
- 이모티콘할인행사
- 최단경로
- 위상정렬
Archives
- Today
- Total
블로그 이름 뭐로 하지
[알고리즘/파이썬] 백준 2206 - 벽 부수고 이동하기 본문
문제
https://www.acmicpc.net/problem/2206
2206번: 벽 부수고 이동하기
N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로
www.acmicpc.net
풀이
2달 전에 풀었던 문젠데 지금 다시 풀 때랑 2달 전 풀이랑 생각한게 똑~~같아서 놀랐다.
난 2달 전과 비교해서 발전한게 없다는 뜻인건가(...) 뭐 아무튼 ... bfs문제였고 visited에 해당 칸에 도달하기까지 가장 짧게 방문한 거리를 저장해두는 방식이다. 여기서 visited를 3차원으로 구성하는데 visited[2][2][1] 에 들어간 값의 의미는 (2,2) 칸에 도착할때까지 한 번 벽을 부쉈을 경우 최단거리. 라는 의미고, visited[2][2][0]에 들어간 값의 의미는 (2,2) 칸에 도착할 때까지 한 번도 벽을 부수지 않았을 경우의 최단거리. 라는 의미이다.
nflag라는 값을 q에 넣어줌으로써 지금까지 벽을 한 번 부쉈는지 안 부쉈는지를 나타내고 해당 값을 사용해서 visited에 원하는 값을 넣어줄 수 있다.
코드
from collections import deque
n,m = map(int,input().split())
arr = []
for _ in range(n):
tmp = input()
tmp = [int(a) for a in tmp]
arr.append(tmp)
dx = [1,-1,0,0]
dy = [0,0,-1,1]
answer = 1e9
def bfs(x,y):
global answer
visited = [[[1e9,1e9] for _ in range(m)] for _ in range(n)]
q = deque()
q.append((x,y,1,0))
while q:
nx,ny,nsum,nflag = q.popleft()
if visited[nx][ny][nflag] > nsum:
visited[nx][ny][nflag] = nsum
else:
continue
if nx == n-1 and ny == m-1:
answer = min(answer,nsum)
continue
for i in range(4):
cx = nx + dx[i]
cy = ny + dy[i]
if cx<0 or cy<0 or cx>=n or cy>=m:
continue
if arr[cx][cy] == 0 :
q.append((cx,cy,nsum + 1,nflag))
else:
if nflag == 0:
q.append((cx,cy,nsum + 1,1))
bfs(0,0)
if answer == 1e9:
print(-1)
else:
print(answer)
'알고리즘' 카테고리의 다른 글
[알고리즘/파이썬] 프로그래머스 - 네트워크 (0) | 2024.01.15 |
---|---|
[알고리즘/파이썬] 백준 2248 - 별 찍기 11 (1) | 2024.01.14 |
[알고리즘/파이썬] 프로그래머스 - 자물쇠와 열쇠 (2) | 2024.01.13 |
[알고리즘/파이썬] 프로그래머스 - 이중우선순위큐 (1) | 2024.01.13 |
[알고리즘/파이썬] 백준 2096 - 내려가기 (2) | 2024.01.13 |