문제
풀이
스택을 사용하여 풀었다.
기본적으로 )는 무조건 push하고, )일 때 스택을 pop한다. stack.size로 잘린 막대 개수를 카운트한다.
1. (가 들어옴 → stack.push
2. )가 들어옴 → 일단 stack.pop을 하고 charAt(i-1) 확인
( )이면 레이저로 잘린 것이므로 piece += stack.size
) )이면 막대하나의 끝이므로 앞에 (를 하나 없앰 piece++;
코드
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 s = br.readLine();
Stack<Character> stack = new Stack<>();
int piece = 0;
for(int i=0; i<s.length(); i++) {
char c = s.charAt(i);
if(c == '(') {
stack.push(c);
}
else if(c == ')') {
stack.pop();
int bc = s.charAt(i-1);
if(bc == '(') {
piece += stack.size();
}else if(bc == ')') {
piece++;
}
}
}
System.out.println(piece);
}
}
'PS(Java) > 백준' 카테고리의 다른 글
[PS] 백준 1388번 바닥 장식 (0) | 2022.07.06 |
---|---|
[PS] 백준 11655번 ROT13 (0) | 2022.06.03 |
[PS] 백준 10828번 스택 (0) | 2022.05.25 |
[PS] 백준 11004번 K번째 수 (0) | 2022.05.24 |
[PS] 백준 11652번 카드 (0) | 2022.05.23 |