ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • boj)10799 - 쇠막대기
    PS/boj 2020. 9. 14. 18:56
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Stack;
    
    public class boj_10799 {
        static Stack<Integer> s = new Stack<>();
        static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        static int ans = 0;
    
        public static void main(String[] args) throws IOException {
            char[] chars = br.readLine().toCharArray();
    
            for (int i = 0; i < chars.length; i++) {
                if (chars[i] == '(') {
                    s.push(i);
                } else {
                    if (i > 0 && s.peek() == (i-1)) { // 레이저
                        s.pop();
                        ans += s.size();
                    } else { // 막대의 끝
                        s.pop();
                        ans++;
                    }
                }
            }
    
            System.out.println(ans);
        }
    }
    

    - 혼자서는 생각도 안난다....

     

     

    - 스택 사용

    - 쇠막대기가 끝날때까지 레이저를 몇 번 만나는가 ?

    - ( 만 스택에 넣으면서 쇠막대기의 시작을 카운팅 

    - ) 만났을때 스택의 맨 위에값이랑 -1 차이가 나면 레이저 

         - 레이저 만나면 지금까지 쇠막대기의 시작을 카운팅한 스택의 사이즈만큼 쇠막대기가 잘림

    - ) 만났는대 스택의 맨 위에값과 차이가 -1 이 아니라면 그건 막대의 끝을 의미하는 닫힌 괄호

         - 지금까지 레이저로 잘랐을땐 막대기의 앞부분만 잘렸으니 닫혓을때도 끝부분 카운팅해서 ++

     

    'PS > boj' 카테고리의 다른 글

    boj)17299 - 오등큰수  (0) 2020.09.15
    boj)17298 - 오큰수  (0) 2020.09.15
    boj)17413 - 단어 뒤집기 2  (0) 2020.09.14
    boj)1158 - 요세푸스 문제  (0) 2020.09.14
    boj)1406 - 에디터  (0) 2020.09.14
킹수빈닷컴