티스토리 뷰

 

1935번: 후위 표기식2

첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이

www.acmicpc.net


문제 요약

  • 후위 표기식은 식의 앞에서부터 피연산자면 스택에 넣고 연산자면 스택에 들어있던 피연산자를 꺼내서 연산하는 것.
  • 후위 표기식의 계산 결과를 소수점 둘째 자리까지 출력하라

 

풀이

  • 피연산자가 A... Z로 주어지지만 결국에는 Double형이다.
  • numbers에 입력 받은 숫자들이 들어가 있는데 A = numbers[0] , B = numbers[1] ... 이런 식으로 바꿔 주어야 한다.
  • A...Z를 (아스키 코드 - 65)로 바꿔 index 번호로 바꿔주자.
  • 연산 결과를 stack에 넣어 반복적으로 연산한다.
import Foundation

let N = Int(readLine()!)!
let input = readLine()!

var stack: [Double] = []
var numbers: [Double] = []

for _ in 0..<N {
    let num = Double(readLine()!)!
    numbers.append(num)
}

for char in input {
    if char.isUppercase {
        let index = Int(char.asciiValue! - 65)
        stack.append(numbers[index])
    } else {
        let first = stack.removeLast()
        let second = stack.removeLast()
        if char == "+" {
            stack.append(first + second)
        } else if char == "-" {
            stack.append(second - first)
        } else if char == "*" {
            stack.append(first * second)
        } else {
            stack.append(second / first)
        }
    }
}
print(String(format: "%.2f", stack[0]))

'Algorithm > 백준' 카테고리의 다른 글

[BOJ] (Swift) 17299 - 오등큰수  (0) 2022.08.04
[BOJ] (Swift) 17298 - 오른수  (0) 2022.08.04
[BOJ] (Swift) 10799 - 쇠막대기  (0) 2022.08.03
[BOJ] (Swift) 17413 - 단어 뒤집기 2  (0) 2022.08.03
[BOJ] (Swift) 10866 - 덱  (0) 2022.08.02
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함