티스토리 뷰
문제 출처: https://www.acmicpc.net/problem/1918
1918번: 후위 표기식
첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의
www.acmicpc.net
중위 표기식을 후위 표기식으로 변환하는 문제이다.
다음과 같은 규칙에 따라 변환할 수 있다.
피연산자 (A, B, C, ..)가 나올 경우 바로 출력해준다.
연산자가 나올 경우
case 1. 스택이 빈 경우 --> 스택에 연산자를 넣어준다.
case 2. 스택에 값이 있는 경우 --> 넣을 연산자보다 우선순위가 높거나 같은 연산자를 모두 pop(출력) 하고 연산자를 push 한다.
괄호가 나올 경우
여는 괄호 '('의 경우 스택에 넣어준다.
닫는 괄호 ')'의 경우 여는 괄호가 나올 때까지 스택에 있는 연산자들을 pop(출력) 해주고 여는 괄호도 pop(출력은 X) 해준다.
Ex) A+B*C
A를 만나서 A를 출력한다. 스택: X 출력 결과: A
+를 만나서 스택이 비어있기 때문에 스택에 넣어준다. 스택:+ 출력 결과: A
B를 만나서 B를 출력한다. 스택: + 출력결과: AB
*를 만나서 자신보다 우선순위가 높거나 같은 연산자를 모두 pop 하지만 스택에 있는 + 보다 현재 넣을 *가 우선순위가 높기 때문에 스택에 넣어준다. 스택: +* 출력 결과: AB
C를 만나서 C를 출력한다. 스택: +* 출력결과: ABC
마지막으로 스택에 있는 모든 값들을 pop 하여 출력 출력 결과: ABC*+
'PS' 카테고리의 다른 글
| [백준] 1004번 어린왕자 (0) | 2022.05.22 |
|---|---|
| [백준] 2877번 4와 7 C++ (0) | 2022.05.21 |
| [백준] 6018번 Tea Time (0) | 2022.05.13 |
| [백준] 7511번 소셜 네트워킹 어플리케이션 C++ (0) | 2022.05.13 |
| [백준] 6593번 상범 빌딩 C++ (0) | 2022.05.13 |
- Total
- Today
- Yesterday
- 11657
- 벨만포드
- 1004
- 백준
- 어린왕자 C++
- 골목길
- 6018
- 골목길C++
- 1738
- 타임머신
- 소셜네트워킹어플리케이션
- 벨만-포드
- 후위 표기식
- 스택
- 1918
- 6539
- 상범빌딩
- 중위 표기식 후위 표기식으로 변환
- tea time
- C++
- 7511
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
