두 번째 코드는 O(NMK)의 시간복잡도를 가져서 시간 초과가 나는데, 놀랍게도 첫 번째 코드의 "if -1 != vis[ni][nj] <= vis[i][j]: break"를 넣으면 O(NM)으로 줄어듭니다. 왜 이걸 넣어도 올바른지와 왜 O(NM)이 되는지 생각해 보는 것도 재미있는 문제인 것 같습니다. 세 번째 코드가 시간 초과인 이유는 눈으로만 봐선 모르겠네요.
continue와 break의 사용은 효율 문제보다는 취향 차이인 것 같습니다. 저는 들여쓰기가 많지 않은 것을 선호하기 때문에 이 둘을 자주 씁니다. 짧은 줄들을 세미콜론으로 이어붙이는 것도 제 취향에 따른 거지만 사실 바람직한 코딩 스타일은 아닙니다.
hello70825 5년 전
제가 맞은 코드로는 python으로 제출하면 시간 초과로 통과를 못합니다.
그래서 @jh05013 님의 코드를 보니 for문을 이용해 통과를 하셨던데요.
제 생각엔 while, for 차이 밖에 없는 것 같은데 어디에서 약 두 배의 시간 차이가 나는 것인지 잘 모르겠습니다.
for문으로 푸신 조건을 while문으로 옮겨 적어도 시간 초과가 나오네요..
그리고 문제와는 상관 없지만 저는 bfs를 풀 때 continue, break를 여러 번 쓰기보다는 조건을 한 줄에 다 쓰고(너무 길면 두 줄에 걸쳐서)
이 조건을 만족하면 큐에 추가하는 방식을 사용하고 있는데 이게 continue, break를 사용하는 것보다 비효율적인 코드인가요?