https://www.acmicpc.net/problem/14923
14923번: 미로 탈출
홍익이는 사악한 마법사의 꾐에 속아 N x M 미로 (Hx, Hy) 위치에 떨어졌다. 다행히도 홍익이는 마법사가 만든 미로의 탈출 위치(Ex, Ey)를 알고 있다. 하지만 미로에는 곳곳에 마법사가 설치한 벽이
www.acmicpc.net
https://www.acmicpc.net/problem/1600
1600번: 말이 되고픈 원숭이
첫째 줄에 정수 K가 주어진다. 둘째 줄에 격자판의 가로길이 W, 세로길이 H가 주어진다. 그 다음 H줄에 걸쳐 W개의 숫자가 주어지는데, 0은 아무것도 없는 평지, 1은 장애물을 뜻한다. 장애물이 있
www.acmicpc.net
https://www.acmicpc.net/problem/2206
2206번: 벽 부수고 이동하기
N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로
www.acmicpc.net
3차원 그래프 탐색문제로 2차원 탐색에 조금 맛이 들렸다면 정복하기 재밌을만한 문제들이다.
한 평면에서의 탐색이 아니라 왜 다른 평면을 만들어 탐색을 이어나가야하는지 생각하기 좋은 문제들이다.
한 평면만으로 탐색이 안되는 이유는 무한탐색이 일어날 수 있기때문에 방문처리를 해주어야하고, 결과적으로 False를 리턴 할 pos가 방문처리를 먼저 해버리게 되었을때 문제가 발생하게 된다.벽을 깨 돌아가는 경우에서 True가 나오는 경우에 대해 차근히 생각해보면 좋을 것 같다.
from collections import deque
r,c = map(int,input().split())
graph = [list(input()) for _ in range(r)]
answer = 0
dxs,dys = [-1,0,1,0],[0,1,0,-1], #URDL
visited = [[0]*c for _ in range(r)]
def in_range(x,y):
return 0<=x<r and 0<=y<c
def bfs(x,y):
global answer,arr
visited[x][y] = -1
que = deque()
que.append((x,y))
arr.append([x,y])
while que:
dx,dy = que.popleft()
nx,ny = 0,0
if graph[dx][dy] == 'U':
nx,ny = dx + dxs[0], dy+dys[0]
elif graph[dx][dy] =='R':
nx,ny = dx + dxs[1], dy+dys[1]
elif graph[dx][dy] =='D':
nx,ny = dx + dxs[2], dy+dys[2]
else:
nx,ny = dx + dxs[3], dy+dys[3]
#내부에서 탐색중일때
if in_range(nx,ny) and visited[nx][ny]==0:
visited[nx][ny] = visited[dx][dy] -1
que.append((nx,ny))
arr.append([nx,ny])
elif in_range(nx,ny) and visited[nx][ny] < 0 : #순환할때
return False
elif in_range(nx,ny) and visited[nx][ny] > 0:
return -visited[dx][dy]
elif not in_range(nx,ny): #벗어나는 지점
return -visited[dx][dy]
return False
for i in range(r):
for j in range(c):
if not visited[i][j]:
arr = []
res= bfs(i,j)
if res:
answer += res
for a,b in arr:
visited[a][b] = -visited[a][b]
print(answer)
[백준_14244] 트리만들기 (0) | 2022.10.19 |
---|---|
[백준_1240] 노드사이의거리 python (0) | 2022.08.28 |
[백준_18513] 샘터 python (0) | 2022.08.26 |
[백준_16932] 모양만들기 python (0) | 2022.08.26 |
[백준_1953_사과나무] 골드5 python (0) | 2022.08.25 |
댓글 영역