• Home

My Codegate

  • Home

백준 4889 안정적인 문자열 자바 문제풀이

2023/12/26 Posted by Codegate Java No Comments

문제 링크

문제 내용은 입력으로 { } 두 글자로만 이루어진 문자열을 받되 문자를 반대 값에 해당하는 } 혹은 { 로 뒤집어서 모두 짝이 맞게 변경할 경우 최소 몇 번을 움직여야 하냐는 것이 되겠다.

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

public class Main {

  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int formNumber = 1;
    while (true) {
      Stack<Character> stack = new Stack<>();
      int closeCount = 0;
      String s = br.readLine();
      if (s.startsWith("-")) {
        break;
      }

      for (int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);
        if (c == '{') {
          stack.push('{');
        } else {
          if (!stack.empty()) {
            stack.pop();
          } else {
            stack.push('{');
            closeCount++;
          }
        }
      }

      int ans = closeCount + stack.size() / 2;
      System.out.println(formNumber + ". " + ans);
      formNumber++;

    }
  }
}

문제를 풀어보자면 Stack에 값을 저장하면서 진행하는데 {가 들어오면 Stack에 넣어주고 }가 들어오면 pop을 사용해서 빼되, {가 없는 상태에서 }가 들어오면 다른 변수에 값을 1씩 늘려주고, 대신 {를 넣어주자

이후 문자열의 값을 모두 처리했다면 1씩 증가시켰던 변수 + Stack.size() / 2; 를 양식에 맞게 출력해주면 끝인데, 1씩 증가시켰던 값은 pop 시키지 못했던 } 라서 바로 이해할 수 있겠지만

Stack.size() / 2를 하는 이유는 Stack 안에 {{{{ 이런 식으로 들어있기 때문에 절반만 돌려도 페어를 맞출 수 있기 때문이다.

No Comments
0

Leave a Reply Cancel Reply

Introduction

My Codegate

Latest Posts

  • Google Search Console API 연동방법
  • 인텔리제이 Gradle Dependency 최신 버전 보는 방법
  • Wallet-Tracker 개발일지
  • Moralis API 자바로 호출방법
  • IntelliJ Commit 후 Push 따로 하는 방법

Categories

  • My Project (4)
  • Java (42)
  • Algorithm (161)
    • Java (152)
    • Algorithm Knowledge (3)
    • Algorithm site usage (6)
  • Vue.js (1)
  • Spring (4)
  • Docker (2)
  • IntelliJ (20)
  • Uncategorized (7)

Recent Comments

  • Codegate on Hello world!
  • A WordPress Commenter on Hello world!

© 2025 — mycodegate.com

Prev Next