https://programmers.co.kr/learn/courses/30/lessons/1844
BFS 써서 구현했는데
from collections import deque
dx = [1, 0, -1, 0]
dy = [0, 1, 0, -1]
INF = 1e5
global_map = []
distance_table=[]
n, m = 0, 0
### 설명 : global map, distance_table, n, m은 모든 bfs함수에서 공통으로 사용하려고 전역변수로 선언함
### distance_table은 거리 저장해놓는 테이블로, 현재 위치에서 다음 위치로 갈지말지 선택할때 현재위치보다 다음위치의 distance가 더 낮으면 궂이 안감
##################################################
def bfs(deq):
### bfs함수 글로벌 변수 선언
global global_map
global distance_table
global n, m
### queue에서 하나씩 뽑음
if len(deq) == 0:
return None
else:
x, y = deq.popleft()
### 현재 위치에서의 거리값
local_n = distance_table[x][y]
### 상하좌우 다음좌표 살피기
for i in range(4):
new_x, new_y = x+dx[i], y+dy[i]
### 다음 좌표가 갈 수 없는 곳이거나 현재 좌표 + 1보다 더 거리가 낮아서 굳이 갈 필요 없는 경우 거르고
### 갈 필요 있는 경우 deque에 삽입
if new_x <0 or new_y <0 or new_x ==n or new_y == m:
continue
elif global_map[new_x][new_y] == 0:
continue
elif distance_table[new_x][new_y] > local_n + 1:
distance_table[new_x][new_y] = local_n+1
deq.append([new_x,new_y])
### 현재 위치에서 갈 수 있는 위치들을 queue에 삽입하고, 다시 재귀적으로 bfs
bfs(deq)
##############################################################
def solution(maps):
answer = 0
### 글로벌 변수 선언 및 초기화
global global_map
global distance_table
global n, m
n = len(maps)
m = len(maps[0])
global_map = maps
distance_table = [[INF for i in range(m)] for j in range(n)]
distance_table[0][0] = 1
deq = deque()
deq.append([0,0])
### bfs를 모두 완수한 후 갱신된 distance table에서 (n-1, m-1) 좌표의 거리값을 분석
bfs(deq)
if distance_table[n-1][m-1] == INF:
answer = -1
else:
answer = distance_table[n-1][m-1]
return answer
이게 내 코드거든?
정확성 테스트는 오류 없이 만점인데
효율성 테스트에서 시간초과도 아니고 4개 다 runtime error가 뜸 ..
정확성에서 다 통과했다는건 런타임 오류가 뜰만한게 없다는 소리 아니야?
도대체 왜 런타임에러가 뜨는지 모르겠음 ㅠㅠ
자바충이라 보기 코드 보기 ㅈ같네 기본적인 길찾기 문젠데 중복이 많은거아녀? 방문 체크는 했냐?
방문체크하면 오히려 에러나더라 ,,
코드올려줄께 함 봐봐라
https://gall.dcinside.com/board/view/?id=programming&no=1741151&page=1
처음부터 다시 짜야할 듯 쓸모없어 보이는게 너무 많다
distance_table는 없어도 될거같고 bfs도 따로 함수로 안 빼는게 낫을 거 같고 deq에 대해서 while문 돌리면서 BFS 돌리셈
근데 distance table은 있는게 낫지않아?? 어짜피 최대 100x100인데
있어야 할 이유가 없잖아
경험상 있어야대 ㅇㅅㅇ 진짜야
ㅋㅋㅋㅋㅋ 니 경험은 안 중요함
거리값은 따로 변수로 두거나 deq 원소 (x, y, distance)로 전달하면 되는걸 이차원 리스트로 따로 저장한다? 메모리 시간 낭비임
Visited쓰면 bfs에서는 가능하겠네 distance table없어도 되겠다 ㅇㅅㅇ 감사ㅎㅎ 첨에 bfs말고 뻘짓 하면서 자꾸 실패하느라 그때 꼭 필요하다고 생각했었는데 아니었던거같네 진짜고마워
저 문제는 visited도 필요없음.. 방문한데는 0으로 초기화 시키면 되거든
무슨느낌인지 알겠다 ㅠㅠ distance를 같이 넘겨주는거까지 나 길찾기 이런거 진짜 잼병이었는데고마유