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