본문 바로가기

코딩테스트/백준

[백준-자바] 4889번 안정적인 문자열 / 2022.03.10

 

https://www.acmicpc.net/problem/4889

 

4889번: 안정적인 문자열

입력은 여러 개의 데이터 세트로 이루어져 있다. 각 데이터 세트는 한 줄로 이루어져 있다. 줄에는 여는 괄호와 닫는 괄호만으로 이루어진 문자열이 주어진다. 문자열의 길이가 2000을 넘는 경우

www.acmicpc.net

 

 

import java.util.Scanner;
import java.util.Stack;

public class Main{
    public static void main(String [] args){
        Scanner sc = new Scanner(System.in);
        // Stack 선언
        Stack<Character> stack = new Stack<>();
        int num = 1;
        while(true) {
            int change = 0; // 바꾼 횟수
            String str = sc.next(); // 문자열 입력
            if(str.contains("-")) // 입력에 - 가 하나 이상 주어진다면 종료
                return;

            for (int j = 0; j < str.length(); j++) { // 문자열을 문자로 접근 인덱스 0번부터
                if (str.charAt(j) == '{')  // 여는 괄호라면 스택에 push
                    stack.push(str.charAt(j));
                else { // 닫는 괄호라면?
                    if (stack.isEmpty()) { // 스택이 비어있으면
                        stack.push('{'); // 닫는 괄호를 여는 괄호로 바꾸고 스택에 push
                        change++;             // 바꿨기 때문에 change ++
                    } else if (stack.peek() == '{') // 스택이 비어있지않고 맨 위가 여는 괄호라면
                        stack.pop(); // 짝이 지어지므로 여는괄호를 pop
                }
            }

            System.out.println(num+". "+((stack.size()/2)+change)); // change 횟수와 스택 길이의 반을 더한 값
            stack.clear(); // 다음을 위해 스택 비우기
            num++;         // 다음 반복문 시작
        }
    }
}

 

풀이 :