본문 바로가기
알고리즘 & 자료구조/백준

백준 2504

by 신재권 2021. 12. 2.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;


public class Main2504 {

	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		Stack<Character> s = new Stack<Character>();
		
		String str = br.readLine();
		int answer = 0;
		int tmp = 1;
		for(int i=0; i<str.length(); i++){
			char c = str.charAt(i);
			if(c == '('){
				s.push(c);
				tmp *= 2;
				
			}else if(c == '['){
				s.push(c);
				tmp *=3;
				
			}else if(c == ')'){ // 2
				if(s.isEmpty() ||s.peek() != '('){ //스택이 비어있거나 (가 아니면 잘못된 괄호
					answer = 0;
					break;
				}
				
				if(str.charAt(i-1) == '('){ //바로 이전값이 짝이 맞으면 
					answer += tmp; // answer에 tmp를 더해준다.
				}
				s.pop();  
				tmp /= 2;  //괄호를 닫았으므로 다시 나눠준다.
				 
			}else if(c == ']'){ // 3	
				if(s.isEmpty() ||s.peek() != '['){ //스택이 비어있거나 (가 아니면 잘못된 괄호
					answer = 0;
					break;
				}
				
				if(str.charAt(i-1) == '['){
					answer += tmp;
				}
				s.pop();
				tmp /= 3;
				
			}
			
		}
		if(!s.empty()){ //다 끝나고 스택이 비어있지 않다면 잘못된 괄호
			System.out.println(0);
		}else{
			System.out.println(answer);
		}
		

	}

}

'알고리즘 & 자료구조 > 백준' 카테고리의 다른 글

백준 1920  (0) 2021.12.04
백준 18870  (0) 2021.12.03
백준 3273  (0) 2021.12.01
백준 1449  (0) 2021.11.30
백준 18258  (0) 2021.11.29