tizm423   3년 전

틀렸습니다...

제 코드에 대해 어떤 반례가 있는지, 혹은 코드를 잘못짠건지 알려주세요.

bupjae   3년 전

Reader 또는 Scanner 둘 중 하나만 사용하세요.

tizm423   3년 전

bupjae님 감사합니다. 혹시 왜 그런지 알 수 있을까요?? 

reader로 처음에 받은 값이 scanner에 영향을 주는건가요??

bupjae   3년 전

bufio.Reader 및 bufio.Scanner 는 둘 다 내부에 버퍼를 가지고 있으며, 성능 향상을 위해 입력의 내용을 미리 읽어올 수 있습니다.

예를 들어 18번째 줄을 실행했을 때 Reader 는 미리 "14\npush 1\npush 2\n" 를 읽어온 뒤 14를 반환할 수 있습니다.

만약 그렇다면, 50번째 줄을 실행했을 때 Scanner 가 보는 첫 번째 입력은 "top" 이 되어버리면서, 잘못된 결과를 출력하게 됩니다. 

tizm423   3년 전

저는 14를 입력하고 이를 bufio.Reader가 처리한 후, 

나머지 명령어를 입력하여 bufio.Scanner가 처리하는줄 알았습니다.

근데 이게 아니라 bufio.Reader같은 경우,

전체 입력("14\npush 1\npush2\ntop\n...)에서 

bufio.Reader가 가지고 있는 버퍼 크기만큼 가져온 후 (예시로 드신 "14\npush 1\npush 2\n")

거기서 14를 반환하고,

다음에 받는 bufio.Scanner는 

bufio.Reader가 가져가고 처리한 다음부터 받는 입력 (예시로 드신 "top\n..")

에서 처리하므로 잘못된 결과를 받게되는것이군요.

bupjae님 설명해주셔 감사합니다.

좋은하루되세요.

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