-
(백준 1935번 후위 표기식2) 라이님 블로그 대회 알고리즘 따라잡기 15) StackPROGRAMMING/알고리즘 2024. 5. 25. 21:41
오늘은 후위 표기식 2를 풀어보았다.
간단한 문제이지만, 풀면서 은근 배우는 점이 많았다!
백준 1935번
https://www.acmicpc.net/problem/1935
풀이에 대한 간단한 설명이 라이님 블로그에 있어서 참고해서 풀었다.
풀이 자체는 어렵지 않았는데, 몇 가지 헷갈렸던 부분이 있어 정리한다.
1. stack의 pop() method
stack의 pop() method는 따로 top 원소를 반환하지 않는다!
그래서 top원소를 빼내서 알고 싶다면 stack.top(); stack.pop();
이렇게 두 개의 method를 한 번에 진행해야 한다.
그렇지 않고, int temp = stack.pop();을 호출하면 'void 형식의 값을 사용하여 "int"형식의 엔티티를 초기화할 수 없습니다'라는 에러를 보게 된다!
2. cout을 통해 소수점 2자리수 출력하기
cout << fixed cout.precision(2)
3. float보다는 double을 사용하기
반례를 아무리 찾아봐도 안되길래 보다가 질문게시판에서 찾은 답변!!
double이 float보다 더 많은 자리수를 계산할 수 있으므로 float을 double로 바꾸면 코드가 돌아간다!
(⭐특히 5%에서 틀린 분들에게 추천하는 방법)
https://www.acmicpc.net/board/view/47631
#include <iostream> #include <cstring> #include <stack> using namespace std; double arr[27]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n; cin >> n; string s; cin >> s; stack<double> st; for (int i = 0; i < n; i++) cin >> *(arr + i); for (unsigned int i = 0; i < s.size(); i++) { double temp1, temp2; if (s[i] == '*' || s[i] == '+' || s[i] == '/' || s[i] == '-') { temp2 = st.top(); st.pop(); temp1 = st.top(); st.pop(); switch (s[i]) { case '*': st.push(temp1 * temp2); break; case '+': st.push(temp1 + temp2); break; case '-': st.push(temp1 - temp2); break; case '/': st.push(temp1 / temp2); break; } } else { st.push(arr[s[i] - 'A']); } } cout << fixed; cout.precision(2); cout << st.top(); }
'PROGRAMMING > 알고리즘' 카테고리의 다른 글
(라이님 블로그 대회 알고리즘 따라잡기 17) 벨만 포드 알고리즘(Bellman-Ford Algorithm) (2) 2024.06.12 (백준 1916번 최소비용 구하기 / 백준 4485번 녹색 옷 입은 애가 젤다지?) 라이님 블로그 대회 알고리즘 따라잡기 16) 다익스트(Dijkstra's Algorithm) (0) 2024.06.05 (백준 9012번 스택) 라이님 블로그 대회 알고리즘 따라잡기 15) Stack (0) 2024.05.22 (백준 10828번 스택) 라이님 블로그 대회 알고리즘 따라잡기 15) Stack (0) 2024.05.21 (백준 2293번 동전 1) 라이님 블로그 대회 알고리즘 따라잡기 14) 투 포인터, 슬라이딩 윈도우 (0) 2024.05.21