반응형
https://www.acmicpc.net/problem/10799
1. '('는 쇠막대기의 시작을 의미
2. ')'는 쇠막대기의 끝을 의미
3. 연속된 "()"는 레이저를 의미
'('일때 스택에 add 해주고,
')'라면 이전의 괄호가 '('이면 레이저를 의미하므로 시작한 레이저의 수 만큼 카운트 해서 잘린 막대기 수를 추가해 준다.
-1을 해준 것은 레이저를 의미하는 괄호가 스택에 들어 갔기 때문에 빼준것이다. 먼저 pop 해주고 그냥 사이즈만큼 더해줘도 된다.
그리고 쇠막대기의 끝을 의미하는 ')'라면 카운트+1을 해주고 스택에서 pop해서 막대기 개수를 줄여준다.
(before 변수는 레이저인지 아닌지를 판별하기 위한 변수이다. )
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
br.close();
Stack<Character> st = new Stack<>();
int cnt=0;
char before=' ';
for(int i=0;i<str.length();i++) {
if(str.charAt(i)=='(') {
st.add(str.charAt(i));
}
else {
if(before=='(') {
cnt+=st.size()-1;
st.pop();
}else {
cnt+=1;
st.pop();
}
}
before=str.charAt(i);
}
System.out.println(cnt);
}// main()
}// class Main
728x90
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
백준 6603 : 로또 _자바 Java (0) | 2023.01.28 |
---|---|
백준 1182 : 부분수열의 합 _자바 Java (0) | 2023.01.28 |
백준 4963 : 섬의 개수 _자바 Java (0) | 2023.01.26 |
백준 11279 : 최대 힙 _자바 Java (0) | 2023.01.26 |
백준 1927 : 최소 힙 _자바 Java (0) | 2023.01.26 |
댓글