rlaalswo01   6년 전

아래 첨부한 코드 같은 경우 제가 착각하여 명백히 잘못 작성한 코드임에도 정답 처리가 됩니다.

하지만 사실은 실제로 돌려보면 무한 반복하여 입력을 받습니다.

반면에 정상적으로 작동하는 코드들은 오답처리가 되네요.

어려운 문제가 아닌데, 정답률이 낮은 것이, 채점에 문제가 있는 것으로 보입니다.

djm03178   6년 전

이상하게 보이기는 하지만 문제는 없는 코드로 보입니다. scanf는 정상적으로 입력을 받은 개수를 리터하므로 word에 입력이 정상적으로 이루어졌다면 1이 리턴될 것이고, 이는 곧 true의 값과 같으므로 단어가 하나 있을 때마다 counter가 증가하는 것이 맞습니다. EOF가 나타났다면 -1이 반환되는데 이는 true가 아니므로 이 때 루프를 빠져나가게 될 것이고요.

그보다, 문제의 정답률이 낮은 이유 중 하나는 https://www.acmicpc.net/board/... 이것 때문이고, 조만간 수정이 될 것으로 기대합니다.

rlaalswo01   6년 전

저두 그런 아이디어로 짠 코드이긴 한데 실제로 "The Curious Case of Benjamin Button(엔터)"

를 입력하면 6이 출력되고 종료하는 것이 아니라 계속해서 다음 입력을 받습니다.

djm03178   6년 전

왜냐하면 엔터는 화이트스페이스이기 때문에, 그 자체로 scanf를 종료시키지 못하기 때문입니다. scanf가 1이 아닌 값을 리턴하게 만들 유일한 방법은 EOF를 입력으로 넣어주는 것 뿐입니다.

rlaalswo01   6년 전

제 말은 그렇기 때문에 저 코드는 실제로 작동시켜보면 문제에 주어진 예시와 같이 작동하지 않는다는 말씀을 드린 건데 의도치 않게 채점 시스템에서는 맞았을 수 있겠네요...

djm03178   6년 전

이 문제는 의도치 않게 맞으셨겠지만, 실제로 문제들 중에는 입력의 끝을 반드시 EOF를 통해 확인해야 하는 문제들이 있고, 이에 대응하는 가장 일반적인 방법이 바로 지금처럼 scanf의 리턴값을 이용하는 것입니다. "실제로 돌려본다"는 걸 손으로 키보드에 치는 것으로 한정할 필요는 없습니다. 똑같은 효과를 내보고 싶으시면, 파일을 하나 만들어서 입력 내용을 저장해놓고 stdin을 그 파일로 연결해서 실행해보시면 됩니다.

rlaalswo01   6년 전

감사합니다 도움이 되었습니다. ^^

여튼 이 문제는 분명히 "단어는 띄어쓰기 한 칸으로 구분된다"라고 까지 명시돼있는데, 정작 제가 "잘못 됐다고 생각했던" 첨부 코드 외의 다른 코드로는 도저히 정답을 얻을 수가 없네요. 포기했습니다 ㅎ하하... 

startlink   6년 전

데이터에는 문제가 없었습니다.

기존 데이터 수정(문제의 조건과 상관 없는 수정) + 새로 만든 데이터를 몇 개를 추가하고, 재채점 했습니다.

https://www.acmicpc.net/rejudg...

startlink   6년 전

추가로 문제 내용에 있던 단, 단어는 띄어쓰기 한 개로 구분된다고 생각한다를 띄어쓰기 한 개로 구분한다로 바꿨습니다.

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