📕 문제
📌 링크
![](https://velog.velcdn.com/images/wowns226/post/2fb88f42-2d35-4292-9e65-0bb66b0b540a/image.png)
📗 접근 방식
- 문자는 그대로 출력한다.
- '('를 만나면 스택에 푸시한다.
- ')'를 만나면 '('를 만날 때까지 스택에서 팝하여 출력한다.
- 연산자를 만났을 때, 스택의 top이 현재 연산자보다 우선순위가 높거나 같으면 pop한 후 현재 연산자를 스택에 푸시한다.
- 연산자를 만났을 때, 스택의 top이 현재 연산자보다 우선순위가 낮으면 현재 연산자를 스택에 푸시한다.
📘 코드
using System.Text;
namespace BOJ
{
class No_1918
{
static void Main()
{
StringBuilder sb = new StringBuilder();
string s = Console.ReadLine();
Stack<char> st = new Stack<char>();
for (int i = 0; i < s.Length; i++)
{
if(s[i] >= 'A' && s[i] <= 'Z')
{
sb.Append(s[i]);
}
else
{
if (s[i] == '(')
{
st.Push(s[i]);
}
else if (s[i] == ')')
{
while (st.Count > 0 && st.Peek() != '(')
{
sb.Append(st.Pop());
}
st.Pop();
}
else if(s[i] == '*' || s[i] == '/')
{
while (st.Count > 0 && (st.Peek() == '*' || st.Peek() == '/'))
{
sb.Append(st.Pop());
}
st.Push(s[i]);
}
else
{
while (st.Count > 0 && st.Peek() != '(')
{
sb.Append(st.Pop());
}
st.Push(s[i]);
}
}
}
while (st.Count > 0)
{
sb.Append(st.Pop());
}
Console.WriteLine(sb);
}
}
}
📙 오답노트
📒 알고리즘 분류