문제 링크: https://www.acmicpc.net/problem/16946
백준 알고리즘 중급 1/3 611에서 7번째 - 16946번 벽 부수고 이동하기 4를 풀어보았다.
풀이: https://ku-hug.tistory.com/153
C++
Python
from collections import deque
def bfs(start):
q = deque()
q.append(start)
cnt = 1
while q:
i, j = q.popleft()
zeros[i][j] = group
for idx in range(4):
ni, nj = i + dy[idx], j + dx[idx]
if ni < 0 or ni >= n or nj < 0 or nj >= m or visited[ni][nj] or graph[ni][nj] == 1:
continue
visited[ni][nj] = True
q.append((ni, nj))
cnt += 1
return cnt
n, m = map(int, input().split())
graph = [list(map(int, input().strip())) for _ in range(n)]
visited = [[False] * m for _ in range(n)]
zeros = [[0] * m for _ in range(n)]
group = 1
info = {}
info[0] = 0
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
for i in range(n):
for j in range(m):
if graph[i][j] == 0 and not visited[i][j]:
visited[i][j] = True
w = bfs((i, j))
info[group] = w
group += 1
for i in range(n):
for j in range(m):
addList = set()
if graph[i][j]:
for idx in range(4):
ni, nj = i + dy[idx], j + dx[idx]
if ni < 0 or ni >= n or nj < 0 or nj >= m:
continue
addList.add(zeros[ni][nj])
for add in addList:
graph[i][j] += info[add]
graph[i][j] %= 10
for g in graph:
print("".join(map(str, g)))
Java
'코테용 문제풀이 > 백준' 카테고리의 다른 글
탈출 풀이 (0) | 2023.02.28 |
---|---|
움직이는 미로 탈출 풀이 (0) | 2023.02.28 |
벽 부수고 이동하기 풀이 (0) | 2023.02.23 |
돌 그룹 풀이 (0) | 2023.02.23 |
연구소 풀이 (0) | 2023.02.23 |