hyong11   1년 전

일단 문제에서 주어진 테스트 케이스는 전부 맞습니다.

input()도 readline으로 바꿔보았고 처음에 miro 리스트 받을 때 int로 일일이 수정했던 코드도 그냥 str로 받아 바로 적용도 해봤는데 여전히 시간초과가 납니다..

pypy3로도 해봤지만 이경우는 메모리 초과가 나오더라구요 ㅠ

몇시간동안 계속 붙잡고있으니 정신 나갈 거 같습니다,, 

도와주시면 감사하겠습니다!

eatingnut   1년 전

35번 줄에 오류가 있네요. 저 부분만 어떻게 고쳐 보세요!

hyong11   1년 전

@eatingnut 답변 감사합니다!

해당 부분 chk[y][x] = True => chk[next_y][next_x]로 바꾸니 맞췄습니다. 
답변 덕분에 왜 시간 초과가 나게 되었는지 이유를 알 수 있었습니다. 

그리고 추가로 궁금한 점이 생겼는데요

제가 질문글에 코드를 여러번 수정했다고 말씀드렸습니다만 체크리스트를 True로 바꾸는 코드 즉, chk[y][k] = True를 30번 줄에 쓰느냐, chk[next_y][next_x] = True를35 번에 쓰느냐에 따라 전자는 시간초과, 후자는 정답처리가 되었습니다.

제가 생각하기엔 두가지 경우 모두 다 논리적으로는 문제가 없을 뿐더러 실행시간도 왜 차이가 나는지 모르겠습니다. 

두 경우의 차이점이라면 조건에 부합하는 좌표를 deque에 append시킨 후 그 좌표를 지나온 좌표로 간주하거나, append하기 전에 지나온 좌표로 간주한다는 것인데

단순히 코드 순서차이만으로  성능이 왜 차이가 나는 걸까요??


혹시 몰라 정답코드와 오답코드 게시하겠습니다.

답변부탁드립니다 ㅠㅠ


djm03178   1년 전

후자는 여러 정점이 하나의 정점을 동시에 방문하려고 할 때 그 정점이 여러 번 큐에 들어가는 문제가 생깁니다. 그러면 그 정점이 큐에서 여러 번 나와서 주변에 있는 정점을 또 여러 번 큐에 넣고, 그것들이 또 나와서 주변에 있는 점을 여러 번 큐에 넣고... 하는 것이 중복되어 겹치면서 기하급수적으로 큐에 많이 삽입하게 됩니다.

hyong11   1년 전

와 이해됐습니다... 큐가 선입선출이라는 걸 인지 못하고있었네요,,  답변주신대로 pop될 때 체크리스트를 true해주면삽질 엄청하겠습니다 ㅠㅠ

감사합니다!!


댓글을 작성하려면 로그인해야 합니다.