생각보다 오래걸린 문제!
스택을 활용하여 풀면 간단하게 풀릴것이라 생각했지만 레이저의 개수를 직접 세어 막대기의 갯수를 세아리려고 하니 재귀함수 까지 생각이 닿았지만 그럴 필요는 없었음
고려사항
- 주어진 그림을 가로로만 봐서 어려웠는데, 세로로 보니 답이 보였음
- 레이저가 발견되면 스택에 쌓여있는 갯수만큼 잘린다 -> 그만큼 더하면됨
- 열린 괄호를 만나면 스택에 넣고, 직전 글자를 확인하여 레이저 이면 pop시키고 토탈 카운트를 누적 연산
- 레이저가 아닌 닫힌 괄호는 해당 막대기의 마무리에 대한 연산은 없었기 때문에 마지막 조각을 더해준다(+1)
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String text = br.readLine();
Stack<Character> stack = new Stack<>();
char prev = ' ';
int totalCnt = 0;
char[] chars = text.toCharArray();
for (char c : chars) {
if (prev == '(' && c == ')') {
// Razor인 경우
stack.pop();
totalCnt += stack.size();
prev = c;
continue;
}
if(c == '('){
stack.push(c);
} else {
stack.pop();
totalCnt += 1;
}
prev = c;
}
System.out.println(totalCnt);
}
}
반응형
'알고리즘 문제풀이' 카테고리의 다른 글
[백준 21608 JAVA] 상어 초등학교 : 조건 잘 구현하기 (0) | 2023.03.26 |
---|---|
[백준 - 14891 JAVA] 톱니바퀴 : 재귀 사용 (0) | 2023.03.21 |
[백준 - 3273 JAVA] 두 수의 합 : set 2개 사용 (0) | 2023.03.18 |
[백준 - 4949 JAVA] 균형잡힌 세상 : 스택 잘 사용하기 (0) | 2023.03.18 |
[백준 - 2446 Java] 별찍기 9 (0) | 2023.03.14 |