rihee1214   3년 전

입 출력 구문 모두 BufferedWriter와 BufferedReader를 이용해서 풀었고 StringTokenizer도 시간이 오래걸린다고 해서 다른 형식으로 바꾸었고 이클립스에서는 정말 잘 돌아갑니다. 근데 채점할때에는 7%와 14% 두곳에서 멈추더니 시간초과가 나옵니다. String에 숫자를 넣어서 강제로 확장 시켜서 그런건지 아니면 다른 문제가 있는건지 잘 모르겠습니다. 이클립스에 돌릴때는 숫자를 넣으면 깨져서 출력되길래  String에 넣어서 쓰고 있는데 이게 시간이 오래걸리는 과정인가요? 아니면 무슨 다른 문제가 있는건가요?

topgun0209   3년 전

BufferedWriter를 통해 시간적 이득을 볼수 있는 이유는 연산 과정에서는 buffer에 저장(write)만 하고, 한번만 출력(flush)해줘서 출력 횟수를 최소화하기 때문입니다

현재 코드처럼 write할때마다 flush해주면 아무런 이득도 볼 수 없게됩니다

모든 연산 처리 후 close전에 한번만 flush해주면 충분합니다 

topgun0209   3년 전

그 외에 시간을 좀더 향상시킬수 있는 방법은..

1. contains는 거의 항상 equals보다 느리므로 마지막의 else에 해당하는 back코드를 else if(str.equals("back)) 등으로 처리하고, push입력을 마지막 else로 처리할 수 있습니다

2. write a+b으로 string을 합칠 경우 성능상 좋지 못하다..고 기억하고 있습니다

정확하진 않지만, write(a) write(b)를 두번 써주니 속도가 향상됬습니다

*숫자가 깨지는 이유는 입력을 string/char[]으로 받으니, 1을 넣을려고 해도 아스키값 1으로 받아버리기 때문입니다.

String.valueOf()등으로 바꿔주시면 정상 작동합니다

rihee1214   3년 전

답변 감사합니다. flush를 각 코드마다쓴 이유는 입력 될때마다 한줄에 한번씩 쓰라고 되어있어서 flush를 썼었는데 마지막에 한번만 써도 되는거였군요.

다른 내용들도 참고해서 코딩해보겠습니다 세세한 답변 감사합니다.

rihee1214   3년 전

해결되었습니다.

제가 코딩을 제대로 시작한지 한두달정도밖에 안되서 어떤게 효율적인지 그렇지 않은지, 어떠한 방식으로 출력이 되는지 등 많은 면에서 부족한걸 알게되었습니다.

상세하게 답변주셔서 진짜 감사합니다.

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