from collections import deque
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
def bfs(a, b, visited, maps, n, m):
global dx, dy
q = deque([(a, b)])
visited[a][b] = 1
while q:
x, y = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < n and 0 <= ny < m:
if maps[nx][ny] == 1 and not visited[nx][ny]:
visited[nx][ny] = visited[x][y] + 1
q.append((nx, ny))
def solution(maps):
answer = -1
visited = [[0]*len(maps) for _ in range(len(maps))]
n = len(maps)
m = len(maps[0])
bfs(0, 0, visited, maps, n, m)
for v in visited:
print(v)
if visited[n-1][m-1] != 0:
return visited[n-1][m-1]
else:
return -1
정확성 2, 3, 6, 8, 9, 11, 13, 14, 17, 18 런타임에러, 나머지는 통과
효율성 2 런타임에러, 나머지는 통과
에러가 뭐길래...? ^^;;
아.. 문제를 대충 읽어서...
격자판이 가로 세로가 같다고 그냥 대충 뭉개서 인식하고 풀었다.. 다시 읽으니까 가로세로는 N과 M으로 나뉘며 서로 다를 수도 있다고..! 그거에 맞춰서 N과 M을 정의하고 각 길이에 맞게 visited배열을 수정해줬다.
from collections import deque
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
def bfs(a, b, visited, maps, n, m):
global dx, dy
q = deque([(a, b)])
visited[a][b] = 1
while q:
x, y = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < n and 0 <= ny < m:
if maps[nx][ny] == 1 and not visited[nx][ny]:
visited[nx][ny] = visited[x][y] + 1
q.append((nx, ny))
def solution(maps):
answer = -1
visited = [[0]*len(maps[0]) for _ in range(len(maps))]
n = len(maps)
m = len(maps[0])
bfs(0, 0, visited, maps, n, m)
for v in visited:
print(v)
if visited[n-1][m-1] != 0:
return visited[n-1][m-1]
else:
return -1

나이스 ~ ^^***
'CodingTest > Programmers' 카테고리의 다른 글
[ 프로그래머스 ] 아이템 줍기 (0) | 2022.10.22 |
---|---|
[ 프로그래머스 ] 단어 변환 (0) | 2022.10.21 |
[ 프로그래머스 ] 네트워크 (0) | 2022.10.21 |
[ 프로그래머스 ] 단속카메라 (0) | 2022.10.21 |
[ 프로그래머스 ] 짝지어 제거하기 (0) | 2022.07.18 |