참고 자료
N개의 정수가 주어진다. 이때, 최솟값과 최댓값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 정수의 개수 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에는 N개의 정수를 공백으로 구분해서 주어진다. 모든 정수는 -1,000,000보다 크거나 같고, 1,000,000보다 작거나 같은 정수이다.
출력
첫째 줄에 주어진 정수 N개의 최솟값과 최댓값을 공백으로 구분해 출력한다.
내 풀이 (326668KB / 1500ms)
배열을 이용해 최대 최소를 풀었다.
import java.util.Scanner
fun main(){
val sc = Scanner(System.`in`)
val size = sc.nextInt()
val arr = Array<Int>(size){0}
arr[0] = sc.nextInt()
var max: Int = arr[0]
var min: Int = arr[0]
for (i in 1 until size){
arr[i] = sc.nextInt()
if (max < arr[i]) max = arr[i]
if (min > arr[i]) min = arr[i]
}
print("$min $max")
}
다른 풀이 1. (327396KB / 1652ms)
import java.util.*
import kotlin.collections.ArrayList
fun main(args: Array<String>) {
val sc = Scanner(System.`in`)
val size = sc.nextInt()
val list = ArrayList<Int>(size)
for (i in 0 until size) {
val n = sc.nextInt()
list.add(n)
}
print("${list.minOrNull()} ${list.maxOrNull()}")
}
자료 구조로 ArrayList를 사용, List의 min() ,max() 함수를 이용해 최대 최소 구함.
다른 풀이 2. (125304KB / 636ms)
[새우버거 새우버거 님의 풀이] : https://shrimp-burger.tistory.com/139
import java.io.*
import java.util.*
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val writer = BufferedWriter(OutputStreamWriter(System.out))
val n = readLine().toInt()
val array = IntArray(n)
StringTokenizer(readLine()).run {
for (i in 0 until n) {
array[i] = nextToken().toInt()
}
}
writer.write("${Arrays.stream(array).min().asInt} ${Arrays.stream(array).max().asInt}")
writer.flush()
writer.close()
close()
}
버퍼 리더를 사용하여 입출력의 효율 성능이 높아졌다. 버퍼와 자바 입출력에 대해 더 공부해야 겠다.
추가 공부할 것
1. with
2. buffer
3. java 입출력
반응형