https://www.acmicpc.net/problem/2504
2504번: 괄호의 값
4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일
www.acmicpc.net
Java같은 경우 Stack은 Vector로 구현되어 있어 비효율적인 것으로 알고 있어 ArrayDeque을 통해 Stack을 사용하였습니다. 저는 해당 문제를 분배법칙을 활용하여 문제를 해결하였습니다.
package BOJ.dataStructure;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.StringTokenizer;
public class BOJ_2504 {
static final String open = "([";
static final String close = ")]";
static final int[] score = {2,3};
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String command = br.readLine();
ArrayDeque<Integer> stack = new ArrayDeque<>();
boolean flag = true;
int result = 0;
int num = 1;
for(int i = 0 ; i < command.length() ; i++){
char now = command.charAt(i);
int index = open.indexOf(now);
if(index >= 0 ){ // 여는 괄호
stack.push(index);
num *= score[index];
}else{ // 닫는 괄호
if(stack.isEmpty()){
flag = false;
}else{
index = close.indexOf(now);
int prev = stack.pop();
if(index == prev){
int value = score[index];
char prevChar = command.charAt(i-1);
int prevIndex = open.indexOf(prevChar);
if(prevIndex >= 0 && prevIndex == index){
result += num;
}
num /= value;
}else{
flag = false;
}
}
}
if(!flag){
break;
}
}
if(flag && stack.isEmpty()){
System.out.println(result);
}else{
System.out.println(0);
}
}
}
'알고리즘' 카테고리의 다른 글
백준 1789번 수들의 합 (JAVA) (0) | 2022.01.05 |
---|---|
백준 14179번 빗물 (JAVA) (0) | 2022.01.04 |
백준 1259번 팰린드룸수 (JAVA) (0) | 2022.01.02 |
백준 1927번 최소 힙 (JAVA) (0) | 2022.01.01 |
백준 15990번 1,2,3더하기 5 (JAVA) (0) | 2021.12.31 |