알고리즘 공부하며 사용자의 입력과 출력에 관한 메모리 사용법을 정리하고자 한다.
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 로 입력을 받고, 직접적인 인코딩을 사용하여 정규식을 검증하지 않고, 문자열 전체를 입력받아 한꺼번에 처리한다고 이해를 하였다.
이 원리를 제대로 알기위해선 밑에 출처를 들어가서 이해를 다시 해보자