package _16;

public class Main {
	
public static void main(String[] args) {
		
		String s = "w((((a)ter(m(el((o)))(()n)";
		System.out.println(solve(s));
	}
	public static String solve(String s) {
		
		StringBuilder sb1 = new StringBuilder();
		StringBuilder sb2 = new StringBuilder();
		int openBrace = 0;
		
		for(char c : s.toCharArray()) {			
			if(c == '(') {
				openBrace++;
			}else if(c == ')') {
				if(openBrace == 0) {
					continue;
				}
				openBrace--;
			}
			sb1.append(c);
		}		
		
		for(int i=sb1.length()-1; i>=0; i--) {
			if(sb1.charAt(i)=='(' && openBrace > 0) {
				openBrace--;
				continue;
			}
			sb2.append(sb1.charAt(i));
		}
		return sb2.reverse().toString();	
	}
}

 

openBrace를 활용하여 여는괄호와 닫는괄호의 개수 증/감을 해가면서 탐색

openBrace가  0이면 ) 가 필요없으므로 continue;

첫번째 for 종료 후 openBrace가 0보다 크면 ( 가 필요이상으로 많음 > 역방향으로 제거

 

'JAVA > 프로그래머스' 카테고리의 다른 글

18.수박수박수박수박수박수? (StringBuilder)  (0) 2021.02.28
17. 일차하는 문자열 찾기  (0) 2021.02.11
15. 더하기  (0) 2021.02.11
13. 숫자 개수  (0) 2021.01.04
12. 숫자사각형3  (0) 2021.01.04