알고리즘/백준
공부 88일차: 백준 1918번 후위 표기식 자바 Java
김발자~
2022. 10. 26. 22:24
반응형
1918 후위 표기식
https://www.acmicpc.net/problem/1918
1918번: 후위 표기식
첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의
www.acmicpc.net
백준 1918번 문제 후위 표기식
문제
과정 생각해보기
https://gimbalja.tistory.com/165
후위표기식2 문제와 연관짓지 않을 수 없다
피연산자나 연산자 중 하나만 스택에 넣는 점에서 비슷하다
이 문제는 피연산자를 넣었던 후위 표기식2와 달리 연산자를 스택에 넣는다
정답 인정 코드
https://takeknowledge.tistory.com/83
이 블로그를 참고했다
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
public class Main {
//우선순위 부여
public static int priority(char ch) {
if(ch == '(')
return 0;
else if(ch == '+' || ch == '-')
return 1;
else // (ch == '*' || ch == '/')
return 2;
}
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
Stack<Character> st = new Stack();
String str = br.readLine();
for(int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if('A' <= ch && ch <= 'Z') { //알파벳(피연산자)이라면
bw.write(ch); //그대로 출력한다
} else if(ch == '(') { //괄호 시작이라면
st.push(ch); //스택에 ( 추가
} else if(ch == ')') { //괄호 끝이라면
while(!st.empty()) {
if(st.peek() == '(') {
st.pop(); //스택에서 ( 만나면 버리고 멈추기
break;
}
bw.write(st.pop()); //스택 빌 때까지 연산자 출력
}
} else { //괄호 없는 사칙연산이라면
//스택이 비어있지 않고, 스택의 끝에 있는 값의 우선순위가 높거나 같다면(즉, *나 /라면)
while(!st.empty() && priority(st.peek())>=priority(ch)) {
bw.write(st.pop()); //연산자 출력
}
st.push(ch); //우선순위 작은 연산자면 다시 스택에 넣는다
}
}
while(!st.empty()) {
bw.write(st.pop()); //스택 빌 때까지 남은 연산자 차례대로 출력
}
bw.flush();
bw.close();
}
}
|
cs |
우선순위를 주는 게 굉장히 새로웠다
한 시간 동안 혼자 생각해봤는데 자꾸 알파벳만 스택에 넣으려고 하고 계속 예외 상황 생각하고
짜봐도 다시 보면 한 예제에만 적용되고... 완전 지쳤다
발전이 있나 싶어서 내일부턴 다시 복습할 듯
반응형