BufferedWriter를 통해 시간적 이득을 볼수 있는 이유는 연산 과정에서는 buffer에 저장(write)만 하고, 한번만 출력(flush)해줘서 출력 횟수를 최소화하기 때문입니다
현재 코드처럼 write할때마다 flush해주면 아무런 이득도 볼 수 없게됩니다
모든 연산 처리 후 close전에 한번만 flush해주면 충분합니다
18258번 - 큐 2
BufferedWriter를 통해 시간적 이득을 볼수 있는 이유는 연산 과정에서는 buffer에 저장(write)만 하고, 한번만 출력(flush)해줘서 출력 횟수를 최소화하기 때문입니다
현재 코드처럼 write할때마다 flush해주면 아무런 이득도 볼 수 없게됩니다
모든 연산 처리 후 close전에 한번만 flush해주면 충분합니다
그 외에 시간을 좀더 향상시킬수 있는 방법은..
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년 전
입 출력 구문 모두 BufferedWriter와 BufferedReader를 이용해서 풀었고 StringTokenizer도 시간이 오래걸린다고 해서 다른 형식으로 바꾸었고 이클립스에서는 정말 잘 돌아갑니다. 근데 채점할때에는 7%와 14% 두곳에서 멈추더니 시간초과가 나옵니다. String에 숫자를 넣어서 강제로 확장 시켜서 그런건지 아니면 다른 문제가 있는건지 잘 모르겠습니다. 이클립스에 돌릴때는 숫자를 넣으면 깨져서 출력되길래 String에 넣어서 쓰고 있는데 이게 시간이 오래걸리는 과정인가요? 아니면 무슨 다른 문제가 있는건가요?