반응형

 

[광고 누르면 오늘의 행운 상승!!]

 

https://www.acmicpc.net/problem/2504

 

2504번: 괄호의 값

4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다.  만일 X가 올바른 괄호열이면 ‘(X)’이나 ‘[X]’도 모두 올바른 괄호열이 된다.  X와 Y 모두 올바른 괄호열이라면 이들을 결합한 XY도 올바른 괄호열이 된다. 예를 들어 ‘(()[[]])’나 ‘(())[][]’ 는 올바른 괄호열이지만 ‘([)]’ 나 ‘(()(

www.acmicpc.net

stack 과 queue를 활용해서 풀었다.

stack 에 계산한 결과 값을 넣어주어 최종적으로 stack에 숫자만 남아있게 한 후
숫자를 더해주었다.

import java.io.*;
import java.util.*;

public class 괄호의값 {
	public static Stack<String> stack;
	public static Queue<Integer> q;
	public static int n;
	public static void main(String[] args) throws Exception{
		System.setIn(new FileInputStream("test.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		boolean isAble = false;
		char ch[]= br.readLine().toCharArray();
		stack = new Stack<>();
		q = new LinkedList<>();

		if((ch.length % 2) != 0) {
		System.out.println(0);
		return;
		}
		int arr[] = new int[4];
		for (int i = 0; i < ch.length; i++) {
			switch(ch[i]) {
			case '[': arr[0]++; break;
			case ']': arr[1]++; break;
			case '(': arr[2]++; break;
			case ')': arr[3]++; break;
			}
		}
		if(arr[0] != arr[1] || arr[2] != arr[3]) {
			System.out.println(0);
			return;
		}
		for (int i = 0; i < ch.length; i++) {
			stack.add(ch[i]+"");
			
			String c = ch[i]+"";
			if(c.equals(")") || c.equals("]")) {
				isAble = true;
				stack.pop();
				
				while (!stack.isEmpty()) {
					String temp = stack.pop();
					int sum = 0;
					
					if (temp.equals("(") && c.equals(")")
							||(temp.equals("[") && c.equals("]"))) {
						
						isAble = false;
						while (!q.isEmpty()) {
							sum += q.poll();
						}
						if(temp.equals("(")) n = 2;
						else if(temp.equals("[")) n = 3;
						
						if (sum == 0) sum = n;
						else sum = (n * sum);
						
						stack.add(sum+"");
						break;
					} else if((!temp.equals("(") && !temp.equals(")") &&
							!temp.equals("[") && !temp.equals("]"))) {
						isAble = false;
						q.add(Integer.parseInt(temp));
					}
					if(isAble) {
						System.out.println(0);
						return;
					}	
				}
			}
		}
		int sum = 0;
		while(!stack.isEmpty()) {
			if(stack.peek().equals("[")  || stack.peek().equals("]")  
					|| stack.peek().equals("(")  || stack.peek().equals(")") ) {
				System.out.println(0);
				return;
			}
			sum+= Integer.parseInt(stack.pop());
		}
		System.out.println(sum);
	}

}
반응형

+ Recent posts