[백준] 후위 표기식2 (1935)(kotlin)
문제 설명
입력 및 출력
» 입력
첫째 줄에 피연산자의 개수(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
}
}