kth990303   2년 전

cin.eof()로 했을 때 시간초과/메모리초과 나는 이유가 무엇인지 모르겠습니다.

입력이 없으면 종료되는 것은 같지 않나요?

cin.eof()를 cin>>n으로 바꾸니 6맞왜틀 후에 ac를 받아 허무하네요...

doju   2년 전

cin.eof()는 프로그램이 지금까지 입력을 받으면서 EOF를 만난 적이 있는지를 반환합니다.

cin >> s가 마지막 테스트 케이스의 마지막 문자열을 입력받는 상황을 상상해 보면, 올바른 입력 데이터는 항상 줄바꿈 문자(\n)로 끝나므로 cin >> s는 이 줄바꿈 문자를 보고 문자열의 끝을 판단하게 됩니다.
따라서 마지막 문자열까지 입력받은 뒤에도 프로그램은 아직 EOF를 만나지 않은 상태이고, cin.eof()는 여전히 false를 반환합니다.

✱ 만약 입력 데이터가 잘못되어 마지막에 줄바꿈 문자가 없었다면, cin >> s는 EOF를 만나서 문자열이 (강제로) 끝났음을 판단하게 되고 cin.eof()true를 반환했을 것입니다.

다양한 제한 초과가 발생하는 이유는 이후 cin >> n이 비로소 EOF를 만나 실패하면서 n의 값이 그대로 유지되는데, 이때 n의 값이 -1이므로 while문이 거의 무한 루프에 가깝게 반복되기 때문입니다.

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