본문 바로가기

알고리즘

백준 알고리즘 1008번 입출력 사칙연산 단계 메모리 / 시간

백준 알고리즘 입출력 사칙연산 단계

 

백준 알고리즘 문제 처음 기초에서 입출력 사칙연산 단계가 나온다.

문제를 제출하고 나면 결과지에 "맞았다", "틀렸다" 라는 결과 이외에도 메모리를 얼마나 사용하였고 시간이 얼마나 걸렸는지가 결과지에 함께 나온다.

 

 

나는 처음 입출력 코드를 java.util.Scanner와 System.out.println()을 사용하였으나, 이는 속도면에서 매우 느린 결과를 나타낸다.

 

그 이유는 코드는 쉽고 간편하지만 리소스를 많이 사용하여 성능 부하를 초래하기 때문이다.

 

그래서 입출력이 많은 코드에서는 지양하는 것이 좋다.

 

특히, Scanner의 경우에는 최적화 관점에서 명시적으로 close()를 선언함으로써 스트림을 종료해주는것이 좋다.

(참고로 close메소드를 통해 닫은 Scanner는 프로그램상에서 다시 사용할 수 없다)

 

 

 

 

그렇다면, 입출력 성능을 더 낫게 하기 위해 어떤 코드를 짜는게 좋을까?!

 

BufferedReader, System.out.println() 사용

BufferedReader는 Buffer에 있는 IO 클래스로 데이터를 버퍼에 저장해두었다가 한번에 입력하는 방식으로 동작하기 때문에 데이터를 하나씩 입력하지 않고 한번에 입력하므로 속도가 빠르다.

 

BufferedReader는 입출력이 많은 코드 또는 데이터의 양이 많은 경우에 많이 사용하는 방식이다.

 

 

 

다시 채점을 해보니 확실히 메모리도 더 적고 시간도 단축된 것을 확인할 수 있다!