백준 알고리즘
13. 10799번 쇠막대기
Romenest
2021. 9. 13. 10:00
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
public class training {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String string = bf.readLine();
Stack<Character> stack = new Stack<>();
int bar = 0;
for (int i = 0; i < string.length(); i++) {
if (string.charAt(i) == '(') {
// '(' 는 쇠막대기가 시작한다는것
stack.push('('); //스택에 (를 넣는다, 즉 스택의 사이즈가 쇠막대기의 개수가 되겠다.
continue;
}
else if (string.charAt(i) == ')') { // ')' 는 레이저가 되거나, 막대가 끝이나거나
stack.pop(); // 일단 stack에서 pop을 실행.
if (string.charAt(i - 1) == '(') { // 바로전이 '(' 였다면 레이저를 의미
bar += stack.size();
// 현재 stack의 사이즈만큼 더해 줌.
// 즉 현재 쇠막대기의 개수를 더해준다
}
else { // 바로전이 '(' 가 아니라 ')' 였다면 단순한 막대의 끝
bar++; // 1을 더해 줌.
}
}
}
bw.write(bar);
bw.flush();
br.close();
bw.close();
}
}
결과는