CS/Algorithm

[백준 : 4889] 안정적인 문자열 - JAVA

yujindonut 2021. 4. 5. 20:03
728x90

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

public class Main {

	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		Stack<Character> stack = new Stack<Character>();
		int no = 1;//출력할 때 number 
		//TestCase가 안정해져있기에 while문으로 입력을 받는다
		while(true) {

			String str = br.readLine();
			
			if(str.contains("-")) break;
			
			int n = str.length();
			int t = 0;
			
			for(int i = 0; i < n; i++) {
				char tmp = str.charAt(i);
				if(tmp == '{')
					stack.push(tmp);
				else {
					if(stack.isEmpty()) {
						stack.push('{');
						t++;
					}
					else
						stack.pop();
				}
			}
			t += stack.size() / 2;
			sb.append((no++) + ". " + t + "\n");
			stack.clear();
		}
		System.out.println(sb.toString());
		br.close();
	}

}

stack은 괄호가 잘 닫혀있는지 판단한다. stack이 비어있는데 ' } '가 들어오면 그 문자는 무조건 바꿔줘야 한다.

 

stack이 여는 괄호만 쌓이는데, 이때 닫히는 괄호를 만나면 pop해준다.

 

이 과정이 계속 반복하게 되면 여는괄호만 스택에 쌓이게 된다. 여는 괄호의 절반은 ' } '로 바꿔줘야한다.

728x90