백준 - 2504번 괄호의 값 (골드 5)
2024. 3. 16. 15:57ㆍ코딩테스트 정리(자바)
728x90
고민해봤으나 풀이가 떠오르지 않았다.
해설을 참고하니 분배법칙을 이용해서 풀어야 한다.
( 2+3*3)*2 + 2*3
-> 2*2 + 3*3*2 + 2*3 으로
import java.io.*;
import java.util.*;
class Main{
public static void main(String[] args) throws IOException{
BufferedReader br=new BufferedReader(
new InputStreamReader(System.in));
BufferedWriter bw=new BufferedWriter(
new OutputStreamWriter(System.out));
String s=br.readLine();
Stack<Character> stack=new Stack<>();
StringBuilder sb=new StringBuilder();
int size=s.length();
int result=0;
int current=1;
for(int i=0;i<size;i++){
char ch=s.charAt(i);
if(ch=='(') {//2를 곱함
current*=2;
stack.push(ch);
}
else if(ch=='[') {//3을 곱합
current*=3;
stack.push(ch);
}
else if(ch==')'){
if(stack.isEmpty() || stack.peek()!='(') {
//스택이 비어있거나 괄호의 짝이 안맞을 경우 0출력
break;
}
if(s.charAt(i-1)=='('){
// 바로 전 기호가 ')' 였다면 결과에 현재까지 계산한 값을 더함.
result+=current;
}
stack.pop();
current/=2; //스택에서 pop하고 현재 계산값에서 2를 나눠줌.
}
else if(ch==']'){
if(stack.isEmpty() || stack.peek()!='[') {
//스택이 비어있거나 괄호의 짝이 안맞을 경우 0출력
break;
}
if(s.charAt(i-1)=='['){
// 바로 전 기호가 ')' 였다면 결과에 현재까지 계산한 값을 더함.
result+=current;
}
stack.pop();
current/=3; //스택에서 pop하고 현재 계산값에서 3를 나눠줌.
}
}
if(!stack.isEmpty()) //스택이 비어있지않다면 괄호가 잘못된 것임.
result=0;
sb.append(Integer.toString(result));
bw.write(sb.toString());
bw.flush();
bw.close();
}
}728x90
'코딩테스트 정리(자바)' 카테고리의 다른 글
| 백준 - 2178번 미로탐색(실버 1) (BFS) (3) | 2024.03.19 |
|---|---|
| 백준 - 1926번 그림 (실버 1) (BFS) (0) | 2024.03.18 |
| 백준 - 10799번 쇠막대기 (0) | 2024.03.15 |
| 백준 - 5430번 AC (골드 5) (0) | 2024.03.14 |
| 백준 - 1021번 회전하는 큐 (실버 3) (2) | 2024.03.12 |