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
문이 거의 무한 루프에 가깝게 반복되기 때문입니다.
kth990303 2년 전
cin.eof()로 했을 때 시간초과/메모리초과 나는 이유가 무엇인지 모르겠습니다.
입력이 없으면 종료되는 것은 같지 않나요?
cin.eof()를 cin>>n으로 바꾸니 6맞왜틀 후에 ac를 받아 허무하네요...