boj)4889 - 안정적인 문자열

2020. 10. 14. 15:48PS/boj

import java.io.*;
import java.util.Stack;

public class boj_4889 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        String str;
        int cnt = 0;

        while ( !(str = br.readLine()).contains("-") ) {
            cnt++;
            Stack<Character> stack = new Stack<>();

            for (int i = 0; i < str.length(); i++) {
                char c = str.charAt(i);

                if (c == '}') {
                    if (!stack.isEmpty() && stack.peek() == '{') {
                        stack.pop();
                    } else {
                        stack.push(c);
                    }
                } else {
                    stack.push(c);
                }
            }

            char[] arr = new char[stack.size()];
            for (int i = arr.length-1; i >= 0; i--) {
                arr[i] = stack.pop();
            }

            int ans = 0;
            for (int i = 0; i < arr.length; i++) {
                if (i % 2 == 0) { // 짝수
                    if (arr[i] == '}') ans++;
                } else { // 홀수
                    if (arr[i] == '{') ans++;
                }
            }

            bw.write(cnt + ". " + ans + "\n");
        }

        bw.flush();
        bw.close();
    }
}

- 성공

 

- {} 이렇게 정상적인 문자열이 바로 붙어있는 경우 바로바로 스택에서 제거

- 최종적으로 보면 스택에 쌓인 값들은 비정상적인 문자열들

- 스택에 있는 값들을 배열에 반대로 옮겨담음

- 배열에서 2개씩 끊어서 본다고 생각

- 짝수 인덱스는 열린 괄호여야하고 홀수 인덱스는 닫힌 괄호여야함

- 열린괄호 자리인데 닫힌괄호가 오면 ++

- 닫힌괄호 자리인데 열린괄호가 오면 ++

 

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

boj)1926 - 그림  (0) 2020.10.15
boj)10866 - 덱  (0) 2020.10.14
boj)2504 - 괄호의 값  (0) 2020.10.14
boj)4949 - 균형잡힌 세상  (0) 2020.10.13
boj)6198 - 옥상 정원 꾸미기  (0) 2020.10.13