bamgoesn   2년 전

https://www.acmicpc.net/board/...를 참고했습니다. 이는 본 문제에서 틀리기 쉬운 점을 종합해놓은 글이니 Go를 사용하지 않으셔도 도움 받으실 수 있을 겁니다.

이 문제 덕분에 배워간 게 있고, 이에 시간을 낭비하지 않고 도움을 받을 수 있는 분들이 있을 것 같아 기록해 둡니다.

-----------

bufio.Scanner는 초기 생성 시 bufio/scan.go에 정의되어 있는 MaxScanTokenSize = 64 * 1024 개의 byte를 담을 수 있는 버퍼를 생성합니다.

이는 즉, 길이가 64*1024 = 65536보다 긴 문자열은 한 번에 읽을 수 없음을 의미합니다. 이 문제에서 함수 입력의 길이는 최대 100000자로, 이는 턱없이 부족합니다.

따라서 단순히 bufio.NewScanner(os.Stdin)를 통해 생성한 scanner로는 이 문제를 풀 수 없습니다.

-----------

이를 해결하는 방법으로는 scanner.Buffer를 사용하여 스캐너의 버퍼 크기를 늘리거나, reader.ReadString('\n')을 사용하면 됩니다.

reader.ReadString('\n')은 reader의 버퍼 크기가 문자열을 담을 수 없더라도, 해당 줄이 끝날 때까지 문자열을 제대로 읽어옵니다.

아래 소스코드에 첨부된 방식으로 사용하시면 됩니다.

baekyoon   2년 전

많은 도움 됐습니다 감사합니다!

doubleknd26   6달 전

와 이게 원인이었군요. 큰 도움 됐습니다!

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