# 문제 출제 사이트
https://www.acmicpc.net/problem/10818
# 문제
N개의 정수가 주어진다.
이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.
# 입력
첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다.
둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다.
모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.
# 출력
첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.
# 첫번째 제출한 소스코드(실패)
- 시간초과로 실패할 줄 알았는데 로직상 문제로 실패 처리가 되었습니다.
- 아래와 같이 수정해서 제출하니까 다시 성공했습니다.
- int maxNum의 초기값을 0으로 집어넣어서 발생한 문제였습니다.
# 두번째 제출한 소스코드(성공)
- 자바의 내장함수 Collections.min() 과 Collections.max() 를 사용해서 쉽게 풀었습니다.
- 하지만 1820ms 라는 시간이 걸렸습니다.
- 다른 사람이 작성한 코드를 찾아보니 아래의 코드를 찾게 되었습니다.
# 다른 사람이 잘 작성한 소스코드
- 위 코드는 대략 508ms 정도의 시간이 걸렸습니다.
- 제 코드와 다른 점은 Scanner가 아니라 BufferReader를 사용하는 점이였습니다.
- 찾아보니 한 글자씩 문자열을 읽어들이는 InputStreamReader의 경우 길이가 긴 문자열을 읽어 들일 때 상당히 불편하고 비효율적이라고 합니다. 이를 보완하기 위해 BufferReader를 사용한다고 합니다.
다른 로직상에는 큰 차이가 없지만 이 부분에서 속도 차이가 생겼다고 생각합니다.
반응형