https://www.acmicpc.net/problem/10799
분석
- 레이저는 반드시 인접한 () 쌍으로 표현
- 나머지 떨어진 괄호`()`가 쇠막대기로 표현됨
- 잘려진 쇠막대기는 총 몇조각인가? 를 구하는 문제
접근
- 스택으로 하는게 좋을 것 같음
- ( 나오면 스택에 넣고
- ) 나오면 pop() 하고 스택 사이즈 만큼 더해주면 될 것 같음
- 예시 시뮬레이션을 돌려보니 3 + 3 + 2 + 3 + 2 + 2 + 1 + 1 = 17 맞음
오류
- 두번째 예시 틀렸음
- )로 레이저 말고 쇠막대기를 닫을때는 stack size 만큼이 아니라 +1 해주면 된다
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String parentheses = br.readLine();
Stack<Character> stack = new Stack<>();
int count = 0;
char prev = '(';
for (char c : parentheses.toCharArray()) {
if (c == '(') {
stack.push(c);
}
if (c == ')') {
if (prev == '(') {
stack.pop();
count += stack.size();
} else {
count++;
stack.pop();
}
}
prev = c;
}
System.out.println(count);
}
}
회고
- if 문을 왜 나열했을까? -> else if()를 사용해서 하나만 체크하고 넘어가는 식으로 만드는 것이 오류를 줄일 수 있을 것 같다
- stack.pop()이 공통으로 중복되므로 하나로 빼서 중복을 줄여줄 수 있었다
'알고리즘 > 자료구조' 카테고리의 다른 글
[백준] 10828 스택 - 자바 (0) | 2022.02.01 |
---|