Idealim
article thumbnail

참고 자료


문제

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")
}
 

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 입출력

 

 

반응형
profile

Idealim

@Idealim

읽어주셔서 감사합니다. 잘못된 내용이 있으면 언제든 댓글로 피드백 부탁드립니다.