2024-TEAM-05 / algorithm-for-kakao

카카오 기출 문제 가즈아🐣
0 stars 0 forks source link

후위 표기식 #57

Open hye-on opened 2 weeks ago

hye-on commented 2 weeks ago

🔗 후위 표기식

hye-on commented 2 days ago

📑 댓글 템플릿

코드 풀이

```cpp #include #include #include using namespace std; string str, ans; // 피연산자는 무조건 순서대로 나옴 -> 나오는 즉시 출력 // 연산자 // 바로 뒤의 연산자보다 우선순위 높으면 출력 가능 // 괄호 안은 바로 출력해야함 int main() { cin >> str; stack st; for (int i = 0; i < str.length(); i++) { if (str[i] >= 'A' && str[i] <= 'Z') { //숫자면 바로 출력 cout << str[i]; continue; } if (str[i] == '(') st.push(str[i]); else if (str[i] == ')') { //괄호안 출력 while (!st.empty() && st.top() != '(') { cout << st.top();; st.pop(); } st.pop(); } else if (str[i] == '*' || str[i] == '/') { // A*B/C 일 때 A*B먼저 계산. 바로 출력 while (!st.empty() && (st.top() == '*' || st.top() == '/')) { cout << st.top(); st.pop(); } st.push(str[i]); } else if (str[i] == '+' || str[i] == '-') { //A*B+C 이거나 A+B+C 여도 A랑 B를 먼저 연산 while (!st.empty() && st.top() != '(') { cout << st.top(); st.pop(); } st.push(str[i]); } } while (!st.empty()) { cout << st.top(); st.pop(); } return 0; } ```

코멘트

uijin-j commented 17 hours ago

📑 댓글 템플릿

코드 풀이

```java import java.io.*; import java.util.*; // 20:05 시작! public class Main { /** * 스택? */ public static void main(String[] args) throws Exception { BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); String nataion = bf.readLine(); Deque stack = new ArrayDeque<>(); StringBuilder sb = new StringBuilder(); for(int i = 0; i < nataion.length(); ++i) { char ch = nataion.charAt(i); if(ch >= 'A' && ch <= 'Z') { // 숫자라면 그대로 문자열에 담아준다. sb.append(String.valueOf(ch)); continue; } if(ch == '(') { stack.push(ch); continue; } if(ch == ')') { while(stack.peek() != '(') { // '('이 나올때까지 문자열에 담아준다. sb.append(stack.pop()); } stack.pop(); // '('연산자를 꺼내준다. continue; } // + - / * 연산자 일경우 while(!stack.isEmpty() && getPriority(stack.peek()) >= getPriority(ch)) { sb.append(stack.pop()); } stack.push(ch); } while(!stack.isEmpty()) { sb.append(stack.pop()); } System.out.println(sb); } public static int getPriority(char op) { if(op == '*' || op == '/') return 2; if(op == '+' || op == '-') return 1; return 0; // '('는 꺼내져서는 안되기 때문에 제일 낮은 값을 반환 } } ```

코멘트

- 괄호, 표기식 문제는 스택인 경우가 많아서, 자료구조를 떠올리긴 쉬웠습니다! 그런데 어떻게 스택을 활용할지 떠올리는게 어려웠던 것 같아요ㅜ