내용

글번호 756
작성자 허진경
작성일 2017-09-22 16:20:58
제목 매칭 괄호 찾기 코딩테스트
내용 소스코드
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;

public class BraceTest {
	public static void main(String[] args) {
		
		List<String> inputStrs = new ArrayList<String>();
		Scanner scan = new Scanner(System.in);
		int count = Integer.parseInt(scan.nextLine());
		for(int i=0; i<count; i++) {
			inputStrs.add(scan.nextLine());
		}
		int line=0;
		for(String str : inputStrs) {
			Stack<Character> symbolStack = new Stack<>();
			Stack<Character> popSymbolStack = new Stack<>();
			
			String[] strs = str.split(" ");
			
			int strCnt = Integer.parseInt(strs[0]);
			int pnt = Integer.parseInt(strs[1]);
			String inputString = strs[2];
			
			char[] inputSymbol=inputString.toCharArray();
			for(int i=0; i<inputSymbol.length; i++) {
				symbolStack.push(inputSymbol[i]);
			}
//			System.out.println(symbolStack);
			int pairPnt = 0;
			System.out.print("#" + ++line + " ");

			while(!symbolStack.isEmpty()) {
				int size = symbolStack.size();
				char data = symbolStack.pop();
				if(data == ')') {
					if(popSymbolStack.isEmpty() && pnt<size) {
						pairPnt = size;
					}
					popSymbolStack.push(data);
				}else if(data == '(') {
//					System.out.println(popSymbolStack);
					if(popSymbolStack.isEmpty()) {
						pairPnt = 0;
//						System.out.print("not match"); //no matching
						break;
					}else {
						popSymbolStack.pop();
//						if(size == pnt) {
//							break;
//						}
					}
				}else {
					System.out.println("error");
				}
			}
//			System.out.println(symbolStack);
//			System.out.println(popSymbolStack);
			if(!popSymbolStack.isEmpty()) {
				pairPnt = 0;
			}
			System.out.println(pairPnt);
		}
		scan.close();
	}
}
//6 0 6 10 0 /* 5 12 3 ()(())(())() 16 5 (()()()))()()()) 8 5 ()()()() 14 3 ()((())())(()) 12 5 ())((()(())) */