[백준] 후위 표기식2 (1935)(kotlin)

문제 설명

백준 1935번 문제 링크

입력 및 출력

» 입력

첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이는 100을 넘지 않는다) 그리고 셋째 줄부터 N+2번째 줄까지는 각 피연산자에 대응하는 값이 주어진다. (3번째 줄에는 A에 해당하는 값, 4번째 줄에는 B에 해당하는값 , 5번째 줄에는 C …이 주어진다, 그리고 피연산자에 대응 하는 값은 정수이다)

» 출력

계산 결과를 소숫점 둘째 자리까지 출력한다.

예제 입출력(테스트케이스)

입력 출력
5
ABC*+DE/-
1
2
3
4
5
6.20
1
AA+A+
1
3.00

문제 풀이1

import java.util.Stack

fun main(args: Array<String>) = with(System.`in`.bufferedReader()) {
    val n = readLine().toInt()
    val equation = readLine()
    val stack = Stack<Double>()
    val value = DoubleArray(n) { readLine().toDouble() }

    for (ch in equation) {
        if (ch in 'A'..'Z') {
            stack.push(value[ch - 'A'])
        } else {
            stack.push(operate(stack.pop(), ch, stack.pop()))
        }
    }

    println("%.2f".format(stack.pop()))
}

fun operate(operand1: Double, ch: Char, operand2: Double): Double {
    return when(ch) {
        '*' -> operand2 * operand1
        '+' -> operand2 + operand1
        '-' -> operand2 - operand1
        else -> operand2 / operand1
    }
}