새발블로그

[백준/Java] 4949 균형잡힌 세상 본문

Problem Solving/Baekjoon

[백준/Java] 4949 균형잡힌 세상

EUG 2025. 3. 30. 13:17

문제

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

풀이방법

문자열을 잘라서 (,  [ 가 들어오면 스택에 넣고, ), ]가 들어왔을 때 짝이 맞는 지 검증

문자열 자르는 방법

-> 한줄을 입력 받고, char 단위로 끊기

 

Java에서 char와 Character 차이

  • char: 기본(Primitive) 타입으로 문자 하나를 저장하는 데 사용됨.
  • Character: char 타입을 감싸는 래퍼(Wrapper) 클래스.

Character를 사용해야 하는 경우

  • 제네릭(Generic) 사용 시 (예: ArrayList<Character>)
  • null을 저장해야 하는 경우
  • Character 클래스의 유틸리티 메서드 사용 시 (isDigit(), toUpperCase() 등)

Java의 Stack 관련 메서드

Java에서는 Stack<T> 클래스를 사용하여 push, pop, peek, search 기능을 사용할 수 있음.

1. push(E item)

  • 스택의 맨 위에 요소를 추가하는 메서드.
  • 리턴값: 추가한 요소.
Stack<Integer> stack = new Stack<>();
stack.push(10);  // 10 추가
stack.push(20);  // 20 추가

2. pop()

  • 스택의 맨 위 요소를 제거하고 반환하는 메서드.
  • 스택이 비어 있으면 EmptyStackException 발생.
int top = stack.pop();  // 20 반환 후 제거
System.out.println(top);  // 출력: 20

3. peek()

  • 스택의 맨 위 요소를 제거하지 않고 반환하는 메서드.
  • 스택이 비어 있으면 EmptyStackException 발생.
int top = stack.peek();  // 10 반환 (제거되지 않음)
System.out.println(top);  // 출력: 10

4. search(Object o)

  • 특정 요소의 위치를 반환하는 메서드.
  • 스택의 맨 위가 1부터 시작하며, 찾지 못하면 -1 반환.
stack.push(30);
stack.push(40);
System.out.println(stack.search(10));  // 3 (맨 위에서 3번째)
System.out.println(stack.search(50));  // -1 (존재하지 않음)

 

풀이

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

public class Main {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);

        while(true) {
            String input = sc.nextLine();
            //종료 조건
            if (input.equals(".")) {
                break;
            }

            Stack<Character> st = new Stack<>();
            boolean isBalanced = true;
            for (int i = 0; i<input.length(); i++) {
                char c = input.charAt(i);

                if (c=='(' || c=='[') {
                    st.push(c);
                } else if (c==')') {
                    if (st.empty() || st.peek()!='(') {
                        isBalanced = false;
                        break;
                    } else {
                        st.pop();
                    }
                } else if (c==']') {
                    if (st.empty()||st.peek()!='[') {
                        isBalanced = false;
                        break;
                    } else {
                        st.pop();
                    }
                }
            }
            if (isBalanced && st.empty() ) {
                System.out.println("yes");
            } else{
                System.out.println("no");
            }
        }
    }
}

 

 

'Problem Solving > Baekjoon' 카테고리의 다른 글

[백준/Java] 18258 큐 2  (0) 2025.04.02
[백준/Java] 14425 문자열 집합  (0) 2025.03.30
[백준/Java] 1541 잃어버린 괄호  (1) 2025.03.26
[백준/Java] 1157 단어 공부  (1) 2025.03.24
[백준/Java] 1152 단어의 개수  (1) 2025.03.23