BufferdRead 와 BufferdWriter

박현석·2024년 6월 12일

알고리즘 공부하며 사용자의 입력과 출력에 관한 메모리 사용법을 정리하고자 한다.

Java & kotlin 에서는 사용자의 입력을 받는 방법에는 여러가지가 있지만, 그중 대표적으로 ReadLine 을 사용한다.

1. ReadLine 사용

fun main(args:Array<String>){
    print("입력할 값 :")
    val value = readLine()
    println("입력 값 : $value")
}

ReadLine 의 반환형태는 기본적으로 String? 타입이다.
즉 Enter키를 통한 1줄마다 읽어오는것이다.

2. 배열을 이용한 여러 변수 저장

하지만 알고리즘을 풀며

1
2

이런식으로의 데이터를 각각 받아오고 싶을때에는 배열을 이용하면된다.

fun main(args:Array<String>){
   print("입력 크기 : ")
   val size: Int = readLine()!!.toInt()
   val arr = Array<Int>(size) { readLine()!!.toInt() }
   var sum = 0
   for (item in arr) {
       sum+=item
   }
   println("Sum: $sum")
}

arr 의 변수에는 각 읽어오는 줄의 개수만큼 그 라인의 숫자가 들어가게 된다.

3. Scanner 사용

Java & Koltin 에서 Scanner 라는 객체가 존재하고 이를 활용할 수 있다.

import java.util.Scanner
fun main(args:Array<String>){
    //2. Scanner()
    val sc = Scanner(System.`in`)
    print("입력할 값: ")
    val value3 = sc.nextInt()
    val value4 = sc.nextInt()
    println("입력 값: $value3, $value4")
}

nextInt() 로 공백을 기준으로 입력을 받으며 Int로 변환이 가능하다
next() 로 String? 타입으로 받을 수 있다.
nextLine() 도 몰론 가능하다.

4. BufferedReader 사용

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val bw = BufferedWriter(OutputStreamWriter(System.`out`))

    val n = br.readLine().toInt()
    val pq = PriorityQueue<Int>()

    for (i in 0..<n) {
        pq.add(br.readLine().toInt())
    }

    val sb = StringBuilder()
    while (pq.isNotEmpty()) {
        sb.append(pq.poll()).append('\n')
    }

    bw.write(sb.toString())
    bw.flush()
    bw.close()
}

BufferedReader 을 사용한다면 Scanner 로 입력을 받고, 직접적인 인코딩을 사용하여 정규식을 검증하지 않고, 문자열 전체를 입력받아 한꺼번에 처리한다고 이해를 하였다.
이 원리를 제대로 알기위해선 밑에 출처를 들어가서 이해를 다시 해보자

출처 https://st-lab.tistory.com/41

profile
너에게만광대

0개의 댓글