kbk0410   4년 전

파이썬으로 거의 문제를 풀고있는데

뭐를 풀어도

런타임에러가 자주 나는것 같네요 다른 언어에 비해서

혹시 그런 이유가 따로 있는건지, 제 아래 코드에 문제가 있는지 확인좀 부탁드립니다.

hun3555   4년 전

음... 이유는 잘 모르겠지만 코드를 수정했더니 정답 코드를 만들기는 했습니다. 다만 본래 코드랑 정확히 어떤 부분에서 차이를 만드는지까지는 아직 제 실력이 부족하네요.

정답 코드 올립니다. 각 줄에 주석을 적어 두었고, 원래 코드에서 달라진 부분들은 주석 처리를 하였습니다.

런타임 에러의 경우는 프로그램 실행 중 에러가 나는 경우인데, 파이썬은 ValueError, SyntaxError, ZeroDivisionError등에 의해서 런타임 에러가 발생하죠.

코드를 바꾼 곳은 그렇게 많지는 않은데, 먼저 n과 m을 받을 때 s를 이용해 받고, 개행문자를 빼낸 뒤 split, 각각을 부여해주는 형태를 하고 있더군요. 바로 split하면 개행문자가 사라집니다. 그리고 저는 한 줄로 정리하는 쪽을 좋아해서 map함수를 이용했고요.

비슷하게, 한 줄을 읽어들이는 부분도 str()을 씌워주면 개행 문자가 제거되므로 바로 append를 시켰습니다.

그리고 기존에 x와 y의 값을 n,m에서 7을 뺀 값으로 하던 걸 8을 뺀 값으로 하게 바꾸었습니다. 그리고 반복문을 x+1까지, y+1까지 하게 바꾸었습니다. 혹시나 이 차이 때문에 에러가 났을 수도 있겠다는 생각이 들었거든요.

min1의 기본값을 64로 바꾸었고, cnt의 경우 그냥 두 줄로 만들어 적었습니다. n%2로 적던 기존의 형식에서 말이죠.

그리고 공백 리스트 만드는 것을 list()에서 []으로 바꿨습니다. 전 후자 쪽을 선호하거든요.

마지막으로, range를 xrange로 바꿨습니다. 이쪽이 시간이 더 적게 걸린다고 알고 있거든요.

이런 변환을 넣었더니 런타임 에러가 나지 않고 정상적으로 정답 처리가 되더군요. 어째서 런타임 에러가 나는지는 모르겠지만, 큰 보드가 들어오는 특정 case에서 에러가 발생하던 것 같습니다. 다만 아직도 어째서 그런지는 잘 모르겠군요... 예상하기로는 list의 index값에서 에러가 발생하지 않았을까 생각합니다. 그리고 아마도 x와 y에 관련되어 있을 것 같습니다.

혹시라도 정확히 어디서 런타임 에러가 발생하는지 알게 된다면 다시 댓글 작성하겠습니다.

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