IT Study/백준 알고리즘

[백준 알고리즘/Kotlin] 10869번 사칙연산 (feat. 입출력, append 체이닝)

three kim 2023. 12. 26. 15:32
728x90

Kotlin 기초부터 탄탄히 가보죠.

 

1. 백준 알고리즘 풀이 시, 입출력의 기본 형태

 

1-1. 기본 형태 (simple)

import java.io.BufferedReader
import java.io.InputStreamReader
import java.io.IOException

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val result = StringBuilder()

    println(result)
    br.close()
}

 

1-2. 예외 처리한 형태

안전한 코딩을 연습하기 위해서는 예외 처리를 습관화하는 것이 좋겠습니다.

(예외가 발생활 확률이 매우 낮을 때는 사용하지 않는 것도 좋을 것 같네요. 필요할 때를 잘 구분해서 사용해야겠습니다.)

import java.io.BufferedReader
import java.io.InputStreamReader
import java.io.IOException

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val result = StringBuilder()

    try {
        // br.readLine()을 사용하여 한 줄을 읽고 이를 StringBuilder에 추가
    } catch (e: IOException) {
        e.printStackTrace()
    } finally {
        br.close()
    }

    println(result)
}
try {
    // 예외가 발생할 수 있는 코드 작성
} catch (e: ExceptionType) {
    // 예외가 발생했을 때 수행할 코드 작성
} finally {
    // 항상 실행되어야 하는 코드 작성 (예외 발생 여부와 상관없이)
}

 

1-3. use 함수 사용 (자동으로 BufferedReader 닫히도록 만들기)

fun main() = System.`in`.bufferedReader().use { br ->
    val result = StringBuilder()
    // br.readLine()을 사용하여 한 줄을 읽고 이를 StringBuilder에 추가
    
    print(result)
}

 

 

2. StringBuilder()의 append 체이닝

코드 스타일에 따라 2가지 방법을 사용할 수 있습니다.

 

2-1. apply 함수 활용

val result1 = StringBuilder()

result1.apply {
    append("Hello, ")
    append("Kotlin!")
}

println(result1.toString())

위 코드에서 apply 함수는 StringBuilder의 인스턴스에 연이어 작업을 수행하도록 해줍니다

여러 줄에 걸쳐 코드를 작성할 수 있어 가독성이 좋습니다.

 

2-2. 직접 append 체이닝

val result2 = StringBuilder()

result2.append("Hello, ").append("Kotlin!")

println(result2.toString())

이 코드에서는 StringBuilder에 직접 append 메서드를 체이닝 하여 작업을 수행합니다.

코드가 간결하며 한 줄에 작성할 수 있습니다.

 

 

3. 최종 결과 코드

import java.io.BufferedReader
import java.io.InputStreamReader
import java.io.IOException

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val result = StringBuilder()

    try {
    	val (a, b) = br.readLine().split(" ").map { it.toInt() }
        val sum = a + b
        val sub = a - b
        val mul = a * b
        val div = a / b
        val rem = a % b

        result.apply {
            append("$sum\n")
            append("$sub\n")
            append("$mul\n")
            append("$div\n")
            append("$rem")
        }
        
    } catch (e: IOException) {
        e.printStackTrace()
    } finally {
        br.close()
    }

    print(result)
}