hello70825   5년 전

제가 맞은 코드로는 python으로 제출하면 시간 초과로 통과를 못합니다.

그래서 @jh05013 님의 코드를 보니 for문을 이용해 통과를 하셨던데요.

제 생각엔 while, for 차이 밖에 없는 것 같은데 어디에서 약 두 배의 시간 차이가 나는 것인지 잘 모르겠습니다.

for문으로 푸신 조건을 while문으로 옮겨 적어도 시간 초과가 나오네요..

그리고 문제와는 상관 없지만 저는 bfs를 풀 때 continue, break를 여러 번 쓰기보다는 조건을 한 줄에 다 쓰고(너무 길면 두 줄에 걸쳐서)

이 조건을 만족하면 큐에 추가하는 방식을 사용하고 있는데 이게 continue, break를 사용하는 것보다 비효율적인 코드인가요?

jh05013   5년 전

두 번째 코드는 O(NMK)의 시간복잡도를 가져서 시간 초과가 나는데, 놀랍게도 첫 번째 코드의 "if -1 != vis[ni][nj] <= vis[i][j]: break"를 넣으면 O(NM)으로 줄어듭니다. 왜 이걸 넣어도 올바른지와 왜 O(NM)이 되는지 생각해 보는 것도 재미있는 문제인 것 같습니다. 세 번째 코드가 시간 초과인 이유는 눈으로만 봐선 모르겠네요.

continue와 break의 사용은 효율 문제보다는 취향 차이인 것 같습니다. 저는 들여쓰기가 많지 않은 것을 선호하기 때문에 이 둘을 자주 씁니다. 짧은 줄들을 세미콜론으로 이어붙이는 것도 제 취향에 따른 거지만 사실 바람직한 코딩 스타일은 아닙니다.

hello70825   5년 전

정말 감사합니다. 항상 배우고 갑니다.

고민을 하다가 생각난건데 https://www.acmicpc.net/proble... 이 문제와 푸는 방법이 똑같군요

날 잡고 전체적으로 문제를 다시 풀어봐야 할 필요성을 느끼네요. 다시 한 번 감사드립니다.

jh05013   5년 전

@nova9128 코드를 베껴서 맞지 말아 주세요. 심할 경우 아이디 삭제까지 갈 수 있는 행위입니다.

nova9128   5년 전

@jh05013

아네 주의하도록 할께요. 

파이썬이 느린걸알아서 시간이야기 나오면 궁금해서 이렇게 저렇게 조금이라도 빠를까 실험중이라서요.

hello70825   5년 전

while문을 이용해 python도 통과시켰습니다 ㅎㅎ

숏코딩을 python으로 해두고 싶은데 탭 대신 스페이스 한 칸으로 하지 않는 이상 python으로 못 해둘 것 같네요 :(

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