Skip to content

Conversation

@Leeyongmun
Copy link
Contributor

안정적인 문자열

조건

괄호의 쌍이 알맞게 맞는지를 체크하는 문제 맞지 않다면 몇개를 수정해야하는지 찾아야 한다.
-> stack을 이용해서 해결

  1. 입력 받은 문자열을 돌면서 '{' 일때와 '}'일때 다르게 처리
  2. '{' 이라면 무조건 push
    3.1. '}' 이면서 스택이 비어있으면 잘못된 경우 짝이 없는경우 이므로 '{' 로 변경해서 넣어주고 ret++
    3.2 . '}' 이면서 스택의 peek값이 '{' 이라면 pop 해준다 올바른짝!
  3. 최종적으로 남아있는 stack은 '{'만 남아있을텐데 이중 절반을 '}' 로 바꾸면 안정적인 문자열이 된다. ret += stk.size() / 2;

코드(스택 풀이)

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

public class BOJ4889 {
    static String s;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        // 무한루프를 돌게 반복문
        for (int t = 1;; t++) {
            s = br.readLine(); // 입력 받기
            if (s.charAt(0) == '-') // -를 입력받는다면 루프 빠져나가기
                break;
            Stack<Character> stk = new Stack<>(); // 올바른 문자열인지 체크하기 위한 Stack 선언
            int ret = 0;

            // s문자열을 돌면서 체크
            for (int i = 0; i < s.length(); i++) {
                // '}' 일때
                if (s.charAt(i) == '}') {
                    // 스택이 비어있을때 }가 들어오는것은 올바른 문자열이 아니다
                    // { 을 push하도록 바꾸고 ret++
                    if (stk.empty()) {
                        stk.push('{');
                        ret++;
                    } 
                    // 가장 위의 문자가 { 라면 pop해줌 -> 올바른 문자열
                    else if (stk.peek() == '{') {
                        stk.pop();
                    }
                }
                // '{' 일때는 무조건 push!
                else {
                    stk.push('{');
                }
            }
            ret += stk.size() / 2; // 최종적으로 남은 { 들의 절반 만큼 }로 바꿔주면 올바른 문자열이 된다
            System.out.println(t + ". " + ret);
        }

    }
}

@hjoo830
Copy link
Member

hjoo830 commented Dec 7, 2025

계속 문자열을 입력 받다가 -을 입력받으면 break
{push하고 }는 스택이 비어있으면 {push, 비어있지 않으면 pop
스택에 남은 {의 반틈을 }로 바꿔야 짝이 맞으므로 stk.size() / 2만큼 정답에 더하기
내 코드와 완전히 동일한 아이디어이고 코드도 거의 비슷하다.
한줄평: 무려 플레4인 cocoyi00 님과 같은 풀이라니 영광입니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants