bfs를 포함한 전체 로직이 너무 비효율적입니다.
현재 while (!isRipe && !isInput0)의 매 사이클마다 최소(N * M) * 2만큼의 연산을 계속 추가로 하고 있고, N = 1000, M = 1000일 때를 생각하면 다소 무리가 있지요.
최초 1들의 위치를 큐에 먼저 넣는 건 정확한 발상인데 이는 '최초 한 번'이면 충분합니다. 매 사이클 마다 N * M을 돌며 추가해줄 필요가 전혀 없습니다.(bfs의 장점을 활용하지 못하고 있어요)
또한 마지막에서 n * m을 돌며 모두 1인지 확인하는 것 또한 bfs진행 후 '마지막에 한 번'이면 충분합니다.
bfs는 앞서 말씀 드린 최초 1들의 위치를 큐에 넣고, 큐가 빌 때까지 각 1들의 위치로부터 4방향 탐색을 진행하며 1의 영역을 점점 넓혀가면 됩니다.(그와 동시에 현재 영역이 방문된 시간을 기록하면서 진행하면 편리해요)
이후 마지막 체크 로직에서 문제가 없다면, 시간을 기록해둔 N * M배열에서 가장 큰 시간이 답이 되겠지요.
taehun0933 1년 전
한 3시간정도 열심히 풀었는데, 예외처리도 다 해주었는데 마지막에 시간 초과가 나서 너무 슬프네요..
풀이 시간쪽에서 개선 사항이 있을까요? 아예 갈아엎어야 할까요?