문제소개
1918번: 후위 표기식
첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의
www.acmicpc.net
우리가 주로 사용하는 중위표기식을 후위표기식으로 바꾸는 문제이다.
![](https://blog.kakaocdn.net/dn/DqNe5/btsGBOx14JE/sHkKskTCkNGJE1Rj3xQdT1/img.png)
문제 풀이
후위표기식 규칙과 stack을 통해 후위 표기식을 만들 수 있다.
후위표기식 규칙
1. 연산자가 아닌 경우 postfix에 추가한다.
2. 스택이 비어있는 경우 연산자를 스택에 넣어준다.
3. 스택이 비어있지 않은 경우 스택의 마지막 연산자가 "(" 이거나 우선순위가 낮을 때까지 스택의 마지막 요소를 postfix에 추가한다.
4. ")" 가 나왔을 경우 "(" 가 나올 때까지 스택의 마지막요소를 postfix에 추가한다.
import Foundation
var infix = readLine()!
var postfix = ""
var stack = [String]()
for chr in infix {
switch chr {
case "-", "+":
while !stack.isEmpty && stack.last != "(" {
postfix += stack.removeLast()
}
stack.append(String(chr))
case "/", "*":
while !stack.isEmpty && stack.last != "(" && stack.last != "+" && stack.last != "-" {
postfix += stack.removeLast()
}
stack.append(String(chr))
case "(":
stack.append("(")
case ")":
while !stack.isEmpty && stack.last != "(" {
postfix += stack.removeLast()
}
stack.removeLast()
default:
postfix += String(chr)
}
}
while !stack.isEmpty {
postfix += stack.removeLast()
}
print(postfix)
'→ Problems' 카테고리의 다른 글
[Algorithm] 백준 - 2156번 포도주 시식 (Swift) (1) | 2024.04.18 |
---|---|
[Algorithm] 백준 - 1929번 소수구하기 (Swift) (에라토스테네스의 체) (1) | 2024.04.14 |
[Algorithm] 백준 - 17299번 오등큰수 (Swift) (0) | 2024.04.13 |
[Algorithm] 백준 - 10799번 쇠막대기 (Swift) (텍스트 대치) (0) | 2024.04.13 |
[Algorithm] 프로그래머스 - 디펜스 게임 (Swift) (Heap, Parametric Search) (0) | 2024.04.05 |