코틀린으로 반폴란드법을 만든 파사
개시하다
뭐라도 쓰고 싶은데 쓰는 방법이 아무것도 없네
요컨대 최근에 한 일을 먼저 써라
하고 싶은 일
10 5 + 2 * sin출력이 0.5가 되면 오케이!반폴란드법
1 + 2 -> 1 2 +
기호를 안에 쓰는 것이 아니라 뒤에 쓰다
이름의 유래는 이전에 쓴 폴란드법과 상반된다
()가 필요하지 않기 때문에 파티를 하는 것이 비교적 수월하다
단, 구분자 필요
옛날에 계산기가 가끔 있었던 것 같아요.
어려울 것 같으니까 일본어 읽어주세요.
10 5 + 2 * sin↓10과 5를 합친 물건, 2로 합친 물건의sin.
↓
sin((10 + 5)*2)
코드
fun main(){
    println(parse("10 5 + 2 * sin".split(" ")))
}
fun parse(rpn: List<String>): Double {
    val stack: Deque<Double> = ArrayDeque()
    rpn.forEach {
        if(it.toDoubleOrNull() != null){
            stack.push(it.toDouble())
        }else{
            val a = stack.pop()
            val b by lazy { stack.pop() }
            when (it) {
                "+" -> stack.push(b + a)
                "-" -> stack.push(b - a)
                "*" -> stack.push(b * a)
                "/" -> stack.push(b / a)
                "sin" -> stack.push(sin(Math.toRadians(a)))
            }
        }
    }
    return stack.pop()
}
해설
공백으로 구분하여 각 요소를parse 함수에 건네주기
fun main(){
    println(parse("10 5 + 2 * sin".split(" ")))
}
val stack: Deque<Double> = ArrayDeque()
rpn.forEach {
    if(it.toDoubleOrNull() != null){
        stack.push(it.toDouble())
    }
bylazy {} 변수를 사용할 때만 값을 가져옵니다
val a = stack.pop()
val b by lazy { stack.pop() }
그 다음은 a입니다. 넣는 순서가 a-&b이기 때문에 꺼내서 사용할 때는 반드시 b->a가 필요합니다.
다음 계산에 계산 결과를 사용합니다
when (it) {
    "+" -> stack.push(b + a)
    "-" -> stack.push(b - a)
    "*" -> stack.push(b * a)
    "/" -> stack.push(b / a)
    "sin" -> stack.push(sin(Math.toRadians(a)))
}
return stack.pop()
결실
0.49999999999999994
어쩔 수 없어!
Reference
이 문제에 관하여(코틀린으로 반폴란드법을 만든 파사), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/yuuki2028/articles/5890438fda3c93b2fc0d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)