iron1209   2년 전

제가 처음 풀때 짠 코드인데 논리적으로 문제가 없다고 생각합니다.

또한 구글에서 검색해서 비교해본 코드하고 출력값 비교 해봐도 2부터 30까지 모든 답이 일치합니다.

그런데도 채점에서 틀렷다고 처리하던데 제가 잘못 본걸까요?

djm03178   2년 전

로컬에서 돌려봤는데 모두 맞았는데 채점 프로그램이 틀렸다고 했다면, 입출력에만 의존할 게 아니라 프로그램이 의도한 대로 동작하는 것이 보장되는지 코드를 다시 유심히 볼 필요가 있습니다.

6번째 줄에서 i를 4부터 시작해서 항상 2씩 건너뛰기 때문에 i는 짝수 값만 가지게 됩니다. 즉, A[5]부터 모든 홀수번째 인덱스에는 아무런 값을 넣은 적이 없으니 쓰레기값이 들어있습니다. 0은 메모리 상에서 매우 흔한 값이므로 질문자님의 컴퓨터에서 모조리 0으로 출력되었다고 해도 이상하지 않지만, 어디에서든 0이 나올 거라는 보장은 없습니다.

그렇다면 i=i+2 대신 i++이라고만 바꾸면 해결될까요? 그것도 아닙니다. 홀수인 경우는 A[i] = 0; 만 실행되고 8~12번째 줄은 실행되지 않아야 하는데 그걸 거르고 있지 않습니다.

이 짧은 코드에 구멍이 2개나 있었는데도, 다시 한 번 점검해보려고 하지 않고 결과만을 보셨기 때문에 문제점을 찾지 못한 것입니다.

그리고 질문은 질문 카테고리에 올려주세요.

iron1209   2년 전

질문을 처음 올려봐서 잘 몰랐습니다. 카테고리를 다음엔 잘 선택해서 올리겠습니다.

그런데 문제를 보시면 알겠지만 홀수번째 일때는 어느 경우도 성립하지 않아서 0으로 출력하였습니다. 구글에서 찾은 정답 코드들도 홀수번째에는 처리를 안해줘서 쓰레기값이 그대로 나옵니다. 

짝수번째 일때만 처리를 해준건데 입력과 출력이 모두 일치하는데도 틀렸다고 처리되는것 같습니다.

djm03178   2년 전

구글에서 찾은 코드가 쓰레기값을 출력했다면 그 코드들 역시 올바른 코드가 아닌 겁니다. 쓰레기값이 아니라 0을 출력해야 하는데 이 코드는 쓰레기값을 출력하고 있습니다. 왜냐하면 7번째 줄의 A[i] = 0;은 절대 실행될 수 없기 때문입니다. 첫 답변을 다시 잘 읽어보세요.

djm03178   2년 전

다시 한 번 강조하는데, i = i + 2이기 때문에 i는 4, 6, 8, 10 등 짝수만 되고 홀수가 될 수가 없으니 i % 2 == 1이 성립하는 일이 존재할 수 없습니다.

iron1209   2년 전

앗 그러네요 그부분을 확인 못했네요

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