mung3477   4년 전

안녕하세요. 

이 문제를 풀면서, 로직은 무조건 맞다고 생각했기에 입력 받는 방식의 문제가 있는 것 같아 이것 저것 해보았는데요.

우선 BOJ의 입력 데이터의 끝이 무조건 '\n'이 아니라는 질문글을 보고 \n으로 썼던 코드를 수정했습니다.

"질문하기 전에 읽어봐주세요" 글의 BOJ 작동 원리 설명글에 

'입력 파일에 적힌대로 입력시키고 돌린다' 고 하기에 입력의 끝에는 EOF가 있을테니

"아 그럼 EOF를 받으면 끝나게 해야겠다" 라고 생각했습니다.

그래서 15번째 줄을 

while((c = getchar()) != EOF) 로 했는데요. 계속 틀렸습니다가 나오더라구요.

설마 이게 EOF를 받으면 그냥 프로그램이 끝나서 while문 밖의 "스택에 남은 연산자들을 출력하는 과정"이 안 돌아가는 건가 싶어서,

while(((c = getchar()) != '\n')으로 했습니다. 그랬더니 출력 초과가 나오더군요.

뭘까... 싶어서 둘 다 써봤는데 풀렸습니다.

사실 왜 풀렸는지가 제일 의문입니다. 

로직이 맞는건 당연한데, 어째서 '\n'도 안되고 EOF도 안되는데 둘이 같이 쓰면 되는가?

BOJ의 입력 형식을 제가 잘못 이해하고 있는 것인지.. 궁금합니다.

+질문이 해결되면 올린 코드는 내리도록 하겠습니다.

djm03178   4년 전

'\n'만 있어도 맞아야 하는데, 그렇지 않은 데이터가 있는 것 같습니다. 그래서 https://www.acmicpc.net/board/view/44585 이와 같은 요청을 전에 올렸는데, 아직 처리되지 않았습니다.

mung3477   4년 전

그 요청을 보고 EOF로 했는데.. 그럼에도 안 풀리길래 BOJ에 EOF가 없는 입력이 있나 해서 질문 드렸습니다 ㅜㅜ

혹시 "입력이 EOF로 끝나지 않을 수도 있다"라는 질문에 대한 답변도 대답해주실 수 있을까요? 관리자분만 아시려나..

djm03178   4년 전

그런 경우는 없고, '\n'이 먼저 있는 후에 EOF가 있어야 하는데 '\n'이 없이 EOF가 나왔다는 의미입니다.

'\n'을 처리하지 않고 EOF만 처리하면 '\n'을 하나의 문자로 보고 처리하게 되기 때문에 틀립니다.

djm03178   4년 전

애초에 EOF라는 건 파일에 들어있는 내용이 아니라, 파일이 끝났을 때 더 읽으려고 하면 입력 함수가 EOF라는 값을 반환할 뿐이기 때문에 파일의 내용이 어떻든 마지막에 EOF가 안 나올 수가 없습니다.

mung3477   4년 전

아하 그렇군요. 초보적인 것이었는데 친절히 답해주셔서 감사합니다.

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