728x90
반응형
https://www.acmicpc.net/problem/1918
풀이
주어진 예제와 같이
이런 방식으로 계산식을 뒤에 써주면 되는 문제입니다.
"표기식은 알파벳 대문자와 +, -, *, /, (, )로만 이루어져 있으며, 길이는 100을 넘지 않는다. "
"("가 나올 시 ")"가 나오면 "("가 있는 부분까지 전부 출력해주면 됩니다.
사칙연산의 우선순위느 *, / > +, - 입니다.
스택을 이용해서 다음과 같이 풀어주면 됩니다.
소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Stack<Character> stack = new Stack<>();
StringBuilder sb = new StringBuilder();
for(char ch : br.readLine().toCharArray()) {
if(ch >= 'A' && ch <= 'Z') {
sb.append(ch);
}
else if(ch == '*' || ch == '/') {
while(!stack.empty() && (stack.peek() == '*' || stack.peek() == '/')) {
sb.append(stack.pop());
}
stack.add(ch);
}
else if(ch == '+' || ch == '-') {
while(!stack.empty() && (stack.peek() == '*' || stack.peek() == '/' || stack.peek() == '+' || stack.peek() == '-')) {
sb.append(stack.pop());
}
stack.add(ch);
}
else if(ch == '(') {
stack.add(ch);
}
else if(ch == ')') {
while(stack.peek() != '(') {
sb.append(stack.pop());
}
stack.pop();
}
}
while(!stack.isEmpty()) {
sb.append(stack.pop());
}
System.out.print(sb);
}
}
728x90
반응형
'백준 > 1 - 5000' 카테고리의 다른 글
[백준] 1912번 : 연속합(JAVA) (0) | 2021.08.07 |
---|---|
[백준] 4889번 : 안정적인 문자열(JAVA) (0) | 2021.07.30 |
[백준] 4562번 : No Brainer(JAVA) (0) | 2021.07.22 |
[백준] 4358번 : 생태학 (JAVA) (0) | 2021.07.12 |
[백준] 2824번 : 최대공약수(JAVA) (0) | 2021.07.12 |
댓글