입력으로 10이 들어오는걸 생각해보세요
1212번 - 8진수 2진수
입력으로 10이 들어오는걸 생각해보세요
윗 분의 말씀대로 이 프로그램은 입력에 숫자 0이 포함되어 있을 때 올바른 답을 출력하지 못합니다.
하지만 '시간 초과'의 원인은 다른 곳에 있습니다.
golang 의 fmt 패키지의 Scanf 나 Print 등은 buffer 없이 입출력을 합니다.
특히 출력의 경우, 다른 언어에서 한 번 print 할 때 마다 (비싼 연산인) flush 가 같이 발생한다고 생각하면 됩니다.
unbuffered I/O 의 성능은 실행 환경에 따라 많은 차이가 있을 수 있습니다.
이 프로그램을 제 컴퓨터에서 333,334 byte 입력 데이터를 넣고 실행했더니 약 1.8초 정도 걸렸습니다.
os.Stdout 를 bufio.NewWriter 로 감싼 뒤, fmt.Print() 대신 out.WriteString() 를 사용하면 더 빠른 출력이 가능합니다.
단, 프로그램을 종료하기 전에 out.Flush() 를 꼭 실행해 주세요.
댓글 달아주셔서 감사합니다~ 두 분 말씀대로 수정해봤는데도 시간초과가 나는데 원인을 모르겠네요 ㅠㅠ bufio.NewWriter 사용 방식이 잘못된걸까요?
감사합니다 bupjae님! 입력받는 방식을 바꾸니 해결됐네요 ㅎㅎ
댓글을 작성하려면 로그인해야 합니다.
ohsory1324 4년 전
터미널에서 333334자를 넣어봐도 입력하자마자 출력이 되는데 문제가 뭘까요? ㅠ