글쓴이님은 해결하신 것 같지만 97%에서 시간초과로 어려움을 겪으시는 분들을 위해 댓글을 남깁니다.
먼저 큰 힌트는 우리는 visited 배열에 방문하는 시점의 시간을 저장해야합니다. 다음 칸이 나보다 더 빠르거나 같은 시간에 방문 되었다면 그방향은 조사할 필요가 없습니다.
저도 한참을 고민했는데 아래의 좌표를 봐주십시오.
N = 8, M = 9, K = 4 라고 가정하고
(1,1)에서 처음으로 bfs를 돌렸을 때 visited 배열이 아래와 같을 것입니다.
0 1 1 10 0 0 0 0
1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
여기서 중요한 점은 (2,1), (2, 2) 는 아래방향은 조사할 필요가 없고, (1,2), (1,3) 은 오른쪽 방향을 조사할 필요가 없다는 것입니다.
예를 들면 (2,1) 은 최대 (1 + k) = 5 번째 아래방향 까지 조사합니다. (2,2) 는 최대 (2 + k) = 6 번째 아래방향까지 조사합니다.
하지만 (2,3) 은 (3 + k) = 7번째 방향까지 조사합니다. 따라서 (2,3)만 아래방향을 조사하면 (2,1) (2,2)가 조사해야 하는 방향까지 조사가 가능하다는 것이죠.
(1,2) (1,3)도 마찬가지로 오른쪽 방향 조사는 (1,4) 가 혼자 맡아서 하면됩니다.
따라서, 다음 칸이 자신보다 같거나 작은 시간에 visited 했다면 break 하고 다음 칸에게 해당 방향 조사를 위임해주면 해결할 수 있습니다.
말이 조금 어려워서 이해가 가실지는 모르겠으나, 많은 힌트를 드렸다고 생각합니다.
nodays 2년 전
97%에서 시간 초과나는데 왜 그런지 모르겠습니다. 도와주세요