19 Apr 2023

[Java] 백준 2504번: 괄호의 값

2504

풀이 코드

스택을 사용하는 문제 중 하나이다. ([등 여는 괄호가 나온다면 스택에다가 쌓고, 반대로 )]가 나온다면 검사를 하게 된다.

만약 ()[]로 되지 않고 (]등으로 짝이 맞지 않는다거나, 문자열 검사가 끝났는데 스택이 비어있지 않다면 틀린 괄호열이니 0을 출력한다.

풀이 방법

package Week3;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Stack;

public class BOJ_2504_괄호의_값 {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String str = br.readLine();
		Stack<Character> stack = new Stack<>();
		int value = 1, result = 0;
		
		for(int i=0; i<str.length(); i++) {
			if(str.charAt(i) == '(') {
				stack.add('(');
				value *= 2;
				
			} else if(str.charAt(i) == '[') {
				stack.add('[');
				value *= 3;
				
			} else if (str.charAt(i) == ')'){
				if(stack.isEmpty() || stack.peek() != '(') {
					result = 0;
					break;
				} else if(str.charAt(i-1) == '(') {
					result += value;					
				}
				
				value /= 2;
				stack.pop();
				
			} else if(str.charAt(i) == ']') {
				if(stack.isEmpty() || stack.peek() != '[') {
					result = 0;
					break;
				} else if(str.charAt(i-1) == '[') {
					result += value;					
				}
				
				value /= 3;
				stack.pop();
				
			}
		}
		
		if(!stack.isEmpty()) result = 0;
		System.out.println(result);
	}

}
Thank You For Reading
SeungJun Jeon

점점 강해지고 있습니다.

comments powered by Disqus