https://www.acmicpc.net/problem/10799
레이저인지 쇠막대기인지 구분하는 것이 포인트이다. 괄호가 인접해있을 경우 () 레이저, 그렇지 않을 경우 쇠막대기이다. 레이저일 경우 스택 사이즈만큼 더해주고 쇠막대기일 경우 1을 더해준다. 스택으로 구현하였는데 스택을 이용하지 않고 괄호 문제처럼 카운트해서 풀 수도 있다.
import java.util.Scanner;
import java.util.Stack;
public class b10799 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
Stack<Integer> stack = new Stack<>();
int sum = 0; // 조각 개수
for (int i = 0; i < input.length(); i++) {
if (input.charAt(i) == '(') {
stack.push(i);
} else { // 닫힌 괄호 )
if (input.charAt(i-1)=='(') { // 이전 문자가 ( 일 경우 레이저
stack.pop();
sum += stack.size();
} else { // 이전 문자가 ) 일 경우 쇠막대기
stack.pop();
sum += 1;
}
}
}
System.out.println(sum);
}
}