본문 바로가기
IT/알고리즘(Algorithm)

[JAVA]백준 10818번 문제 풀이

by 공부하는개미 2022. 1. 16.

 

# 문제 출제 사이트

https://www.acmicpc.net/problem/10818

 

10818번: 최소, 최대

첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.

www.acmicpc.net

 

 

# 문제

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를 사용한다고 합니다.
    다른 로직상에는 큰 차이가 없지만 이 부분에서 속도 차이가 생겼다고 생각합니다.
반응형