Post

[BOJ/C++] 1935번 후위 표기식2

문제

[백준/C++] 1935번 후위 표기식2

문제 해석

후위 표기식은 대표적으로 스택 자료구조를 이용한다.

  • 피연산자 : 스택 push
  • 연산자 : 스택에서 숫자 두 개를 pop 하고 연산 후, 결과값을 스택 push

문제의 예제 입력 1에서 ABC*을 연산하는 상황은 다음과 같다.

문제 해석

구현 방향

피연산자에 해당하는 값을 담을 alphabet, 피연산자와 계산 결과들을 담아둘 st을 선언한다.

피연산자, 연산자 구분

피연산자는 대문자 A-Z라고 했기 때문에, char A를 뺐을 때 0 이상 26 이하이면 피연산자이다. (조건문을 &&로 해야 하는데 ||로 쓰는 실수는 하지 않도록 하자.)

1
2
3
4
// operand
if (input[i] - 'A' >= 0 && input[i] - 'A' <= 26) {
    st.push_back(alphabet[input[i] - 'A']);
}

피연산자 순서

연산자를 만났을 때 st에서 두 개의 피연산자를 pop 한다. 이때 나중에 pop한 값이 연산자의 앞에 오도록 계산한다. 계산 결과도 st에 push한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// operator
else {
    double second = st.back();
    st.pop_back();
    double first = st.back();
    st.pop_back();
    double new_value;

    if (input[i] == '+') { new_value = first + second; }
    else if (input[i] == '-') { new_value = first - second; }
    else if (input[i] == '*') { new_value = first * second; }
    else if (input[i] == '/') { new_value = first / second; }

    st.push_back(new_value);
}

소수점 둘째자리까지 출력

setprecision(n)은 n자리를 출력하고, fixed를 설정하면 소수점 아래 n자리를 고정할 수 있다. iomanip을 include 해서 사용할 수 있다.

1
2
3
    #include <iomanip>

    cout << setprecision(2) << fixed << st.back();

전체 코드

[백준/C++] 1935번 후위 표기식2 / 풀이 코드

This post is licensed under CC BY 4.0 by the author.