일단 try문을 사용했을 경우, 코드에 발생하는 오류가 수정되지 않았는데 그걸 그저 "뭐든지간에 오류가 생기면 0을 출력해라"로 바꾸니, 원래는 에러가 나던 게 0이 출력되는 것으로 바뀌어, 정답이 0이 아닌데 에러가 나던 입력에 대해 0을 출력해서 틀렸습니다를 받는 것임을 먼저 알려드립니다.
-------------------
이와 같이 코드를 제출했는데 런타임에러를 받게 되면, 우선 런타임 에러의 종류를 먼저 확인해보세요.
확인해봤더니 런타임 에러의 종류가 IndexError입니다. 모르면 구글에 그대로 python indexerror라고 검색해보면 나오는데, 리스트나 문자열 등에 인덱싱을 할 때 범위를 넘어가서 생기는 오류라고 하네요.
이와 같은 과정을 거치면 에러가 나는 위치의 후보가 제한되기에 에러를 수정하기 쉬워집니다. 이 코드의 경우는 인덱싱을 하는 위치가 5행뿐이므로 5행에서 문제가 발생하는 것임을 알 수 있습니다.
-------------------
이제 디버깅을 해야 하는데, 디버깅을 할 때엔 최대한 자신의 코드를 공격한다는 마음을 가지고 해야 합니다. 실제론 말이 쉽지 어려운 과정으로, 지금은 그 바람직한 과정을 알려드리겠습니다.
arr2[N-1]이 범위를 벗어난다는 건 arr2의 길이가 N보다 짧은 경우가 있다는 의미이므로, 입력에 따라 arr2가 어떻게 나오는지 생각을 해봐야 합니다.
arr2를 확인하기 위해 4행과 5행 사이에 print(arr2)를 넣고 예제를 입력해봤더니 arr2가 5714285714285716임을 알 수 있습니다. 그러면 N이 이 길이보다 길어지면 IndexError가 발생함을 알 수 있게 됩니다.
-------------------
다만 이와 같은 생각을 하는 게 어려울 수 있습니다.
오답이 나왔을 때 그나마 반례를 쉽게 찾을 수 있는 방법은 https://www.acmicpc.net/blog/v...의 반례찾기 문단에 설명되어 있으니 참고해보세요.
이것 외에도 https://www.acmicpc.net/help/q...에서 맨 위에 링크된 글을 읽어보면 좋습니다. 이 글 자체도 좋은 내용이 있고요.
pch3320 2년 전
예외처리가 없으면 런타임 에러 예외처리가 있다면 틀렸다고 뜨는데 그에 대한 이유를 알고싶습니다. 인터넷을 찾아보면 솔루션만 나와있고, 이와 비슷하게 코드를 쓰신분들도 그냥 안된다 정도로만 설명하고 안되는 이유에 대한 설명이 없어 궁금합니다.