문제 조건
어려웠던 점
문제를 풀면서 여는 괄호와 닫는 괄호가 인접한 레이저인 경우에는 stack의 size만큼 더해주는 것은 생각을 했었습니다. 그러나, 그다음에 대해 생각해주지 못했습니다.
문제 풀이
왼쪽 끝은 여는 괄호 ‘ ( ’는 스택에 넣어줍니다.
레이저인 경우에는 쇠막대기가 잘립니다. 즉, 오른쪽 닫는 괄호 ')'인 경우 스택의 Top을 pop하여 레이저인 경우에는 스택 사이즈만큼 더해주면 됩니다.
다음과 같이 레이저(빨갛게 칠해놓은 부분)를 만나는 경우 쇠막대기(노랗게 칠해놓은 부분)는 스택 사이즈만큼인 3개로 나뉘는 것을 확인할 수 있습니다.
닫힌 괄호가 레이저가 아닌 경우, 즉 쇠막대기인 경우 남은 잘린 부분을 더해주면 됩니다. 남은 잘린 부분은 +1 해주면 됩니다.
다음과 같이 쇠막대기의 닫힌 괄호(빨갛게 칠해놓은 부분)을 만난 경우 남은 쇠막대기(파랗게 칠해놓은 부분)는 +1 해주면 되는 것을 확인할 수 있습니다.
문제 구현
public class Main_10799 {
public static void main(String[] args) throws IOException {
Stack<Character> stack = new Stack<>();
int result = 0;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == '(') {
stack.add(str.charAt(i));
} else {
if(stack.pop() == i-1) result += stack.size();//레이저인 경우
else result++;//쇠막대기인 경우
}
}
System.out.println(result);
}
}
'Algorithm > 백준' 카테고리의 다른 글
[백준]BOJ 18352 특정 거리의 도시 찾기(자바/다익스트라/메모리초과 해결) (0) | 2023.02.04 |
---|---|
[백준] BOJ 2504 괄호의 값(자바/스택) (0) | 2023.01.26 |
[백준] BOJ 1541 잃어버린 괄호(자바) (0) | 2023.01.11 |
[백준]BOJ 14719 빗물(자바) (0) | 2023.01.05 |
[백준] BOJ 1316 그룹 단어 체커(자바) (0) | 2023.01.02 |