iioo233   2년 전

첫 번째 소스 코드는 백준 웹사이트에서 원활하게 잘 돌아가구요, 두 번째 소스 코드는 백준 웹사이트에서 런타임에러라고 뜹니다. 두 소스 코드 모두 비쥬얼 스튜디오에서는 잘 돌아가는데, 차이가 있다면 어디서 차이가 있는건가요?

일단 제가 생각하고 있는 바를 간략하게 설명하자면 두 번째 63~78번째 코드를 그냥 checkFunction 함수로 바꾸어 작성했을 뿐인데, 효율성에서 차이가 있다는 것인데, 어디서 차이가 나는건지 잘 모르겠습니다. main 자체의 for문이 적게 실행되서 main의 복잡도가 줄어들었다.. 정도로 이해하기에는 checkFuction 자체의 복잡성도 있으니깐.. 근데 얇은 글씨로 쓴 이 부분은 제 생각이라 방향성이 아예 엇나가서 생각하고 있을지도 모르니까 무시하셔도 좋을 것 같습니다..! 다양한 의견 환영합니다!

djm03178   2년 전

런타임 에러는 시간 복잡도와는 무관합니다. 시간이 오래 걸려서 받게 되는 것은 시간 초과이고, 런타임 에러는 프로그램이 실행 도중 잘못된 행동을 하여 비정상적으로 강제 종료된 것을 의미합니다.

최대 반복 횟수가 8이고 문자열의 최대 길이가 20이므로 출력하는 문자열의 길이는 최대 160입니다. 그런데 배열의 크기가 100이므로 이런 경우 두 코드 모두 배열의 범위를 벗어나게 됩니다. 배열의 범위를 벗어나는 것은 undefined behavior이므로 무슨 일이 일어나도 이상하지 않습니다. 잘 통과될 수도 있고, 런타임 에러가 날 수도 있고, 그냥 틀리거나 시간 초과가 날 수도 있습니다.

djm03178   2년 전

또한 문자열의 길이가 20인 경우 뒤에 널 문자가 붙기 위해서는 최소 21칸의 배열이 필요합니다. 마찬가지로 출력하기 위한 배열에도 최소 161칸이 필요합니다.

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