728x90
from collections import deque
def solution(maps):
answer = []
n = len(maps)
m = len(maps[0])
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
q = deque()
visited = [[False] * m for _ in range(n)]
foods_sum = 0
for i in range(n):
for j in range(m):
if not visited[i][j] and maps[i][j] != 'X':
q.append((i, j))
visited[i][j] = True
foods_sum += int(maps[i][j])
while q:
x, y = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx >= 0 and nx < n and ny >= 0 and ny < m:
if not visited[nx][ny] and maps[nx][ny] != 'X':
q.append((nx, ny))
visited[nx][ny] = True
foods_sum += int(maps[nx][ny])
answer.append(foods_sum)
foods_sum = 0
if not answer:
return [-1]
return sorted(answer)
이런 BFS 코드가 있다고 해보자.
이 코드의 문제점은 뭘까?
for i in range(n):
for j in range(m):
.....
for i in range(4):
nx = x + dx[i]
.....
바로 이 부분이다.
반복문을 돌리는 변수 i가 2번 등장한다.
이럴 경우 파이썬에서는 오류가 발생할 수 있다.
파이썬에서 반복문이 중첩될 경우, 반복문을 돌리는 변수명은 모두 다르게 지정해주자.
728x90
'알고리즘 > 알고리즘 노트' 카테고리의 다른 글
deque 사용시 주의점 (0) | 2024.07.02 |
---|---|
파이썬 깊은 복사 (0) | 2024.07.01 |
백트래킹의 기본 구조 (0) | 2024.04.09 |
2차원 리스트 입력받기 (0) | 2023.02.17 |
2차원 리스트 회전 (0) | 2023.02.11 |