wiki

입출력

입출력은 ICPC 문제 틀렸습니다의 알파이자 오메가라고 할 수 있습니다. 이 문서에서는 입출력으로 인한 성능 감소 폭을 줄이는 방법과, 여러 입력 유형을 처리하는 방법에 대해 논합니다.

유형

정확히 n개 읽기

흔한 유형입니다. n줄에 걸쳐서, 혹은 한 줄에 n개의 값을 주기도 합니다.

자주 틀리는 요인

옛날에 만들어진 테스트케이스는 C++을 기준으로 테스트를 했다던가 하는 이유로, 다음의 조건을 완벽히 지키지 않기도 합니다. RTE가 뜬다면 다음을 확인해보세요.

공백 관련
  1. 공백이 하나가 아닙니다. (ex. 1 2 4)
  2. 앞이나 뒤에 불필요한 공백이 있습니다. (ex.   3 7)

trim이나 strip 따위의 함수로 앞뒤 공백을 지우고, 공백 단위로 나눈 다음 빈 문자열을 지우면 보통 해결할 수 있습니다.

개수 관련
  1. n개보다 적습니다.
  2. n개보다 많습니다.

적다면 빈 공간을 0으로 채우고 (C++ 배열로 테스트한 경우일 가능성이 높습니다), 많다면 정확히 n개만 남도록 컨테이너를 재조정합니다.

형식 관련
  1. 마지막 줄이 \n으로 끝나지 않습니다.

\n을 생각하고 마지막 문자를 자르는 방식으로 입출력을 처리하는 것은 위험합니다. 가능하다면 trim, strip 등의 공백 제거 함수를 사용하는 것이 좋습니다.

끝까지 읽기

EOF라는 키워드로 검색하면 잘 나올 겁니다. while (true)와 eof 감지를 통해 입력의 끝까지 읽으시면 됩니다.