백준 안정적인 문자열 4889 java

정상민·2023년 8월 4일

문제링크

문제 접근

  • 괄호 문제는 스택을 쓰자
  • 특정 규칙으로 만드는게 아니라 몇 번 수정하면 되는지가 궁금
  • '{'는 스택 add
  • '}'는 스택 peek()이 짝이 맞으면 poll(), 안맞으면 '{'로 바꾸고 add
  • 문자열 다 돌았는데 스택이 남아있으면 {{{{{{이렇게 있는 것
  • 그럼 스택 size / 2 만큼 바꾸면 해결

코드


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;

public class baek_4889 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        int turn = 1;
        while(true){
            st = new StringTokenizer(br.readLine());
            String now = st.nextToken();
            if(now.charAt(0) == '-') break;
            Stack<Character> stack = new Stack<>();
            int cnt = 0;
            for(int i=0;i<now.length();i++){
                char nowC = now.charAt(i);
                if(nowC == '}'){
                    if(stack.isEmpty()){
                        cnt++;
                        stack.add('{');
                    }
                    else if(stack.peek() == '{') stack.pop();

                }
                else if(nowC == '{'){
                    stack.add(nowC);
                }
            }
            if(!stack.isEmpty()){
                cnt += stack.size() / 2;
            }
            System.out.println(turn+". "+cnt);
            turn++;
        }
    }
}

결과

정리

  • 예외 케이스가 있을 수 있다고 생각했는데 한번에 됨
  • 확실히 특정 규칙으로 만드는 것보다는 카운트만 하면 되서 쉽게 접근
profile
안녕하세요! 개인 공부를 꾸준히 기록하는 공간입니다.

0개의 댓글