# BOJ10799 쇠막대기
https://www.acmicpc.net/problem/10799 (opens new window)
여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다.
1. 레이저는 여는 괄호와 닫는 괄호의 인접한 쌍 '()' 으로 표현된다. 또한, 모든 '()'는 반드시 레이저를 표현한다.
2. 쇠막대기의 왼쪽 끝은 여는 괄호 '('로, 오른쪽 끝은 닫힌 괄호 ')'로 표현된다.
# 제출 코드
첫 시작은 무조건 '('로 시작한다.
닫힌 괄호가 나오면 이전 괄호에 따라 레이저 인지 쇠막대기의 끝인지 확인할 수 있다. 이전 괄호가 '('라면 레이저로 판단하여 현재 stack에 들어 있는 쇠막대기의 개수를 count한다. ')'라면 쇠막대기의 끝을 의미하기 때문에 자신만큼 + 1하여 더해준다.
if (c == ')') {
stack.pop();
if (prev == '(') {
count += stack.size();
} else {
count++;
}
prev = c;
}
아래는 최종 제출 코드이다.
import java.util.Scanner;
import java.util.Stack;
public class BOJ10799 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String words = scanner.nextLine();
Stack<Character> stack = new Stack<>();
int count = 0;
char prev = ' ';
for (char c : words.toCharArray()) {
if (c == '(') {
stack.push(c);
prev = c;
continue;
}
if (c == ')') {
stack.pop();
if (prev == '(') {
count += stack.size();
} else {
count++;
}
prev = c;
}
}
System.out.println(count);
}
}