[BOJ]백준 4949번:균형잡힌 세상(JAVA)

ho's·2022년 4월 25일
0
post-custom-banner

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

문제

풀이

  • 문자열을 입력받고 .을 입력하면 그 라인의 문자열이 균형잡힌 문자열인지 판단한다.
  • 문자열에 [ ( 이 입력이 되면, stack에 추가를 한다.
  • ) ] 이 입력이 되면 stack.peek()을 했을때, 순서에 맞게 나와져야 한다. 예를 들어 )을 입력했으면, (이 꺼내져야하고, ]을 입력했으면 stack.peek()을 했을 때, [이 꺼내져야 한다.

위의 문제 코드 작성을 위해서 2단계로 나누기로 했다.

메인메소드

메인메소드의 기능

  • "."가 나올때 프로그램이 종료 되므로, Scanner를 통해 입력받은 문자열이 "."이 되면 종료되는 코드를 작성한다.
  • 그 외의 문자열은 solve함수를 호출해 처리한다.

solve메소드

이번 알고리즘 문제를 푸는 코드이다.
다음과 같은 기능을 갖는다.

  • Character 타입의 stack 생성한다.

  • 입력받은 문자열의 길이만큼 charAt을 이용해 char타입 변수 c에 저장한다.
    ( , [ 가 입력되면 c에 저장하고, stack에 넣어준다.

  • c = ) 이면, stack이 비어있거나, stack.peek() != ( 이면 "no"를 출력한다.

소스코드


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


public class Baekjoon_4949 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String s;

        while (true) {
            s = scan.nextLine();
            if (s.equals(".")) {
                break;
            } else
                System.out.println(solve(s));
        }
    }

    private static String solve(String s) {
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (c == '(' || c == '[')
                stack.push(c);

            else if (c == ')') {
                if (stack.isEmpty() || stack.peek() != '(')
                    return "no";
                else
                    stack.pop();
            } else if (c == ']') {
                if (stack.isEmpty() || stack.peek() != '[')
                    return "no";
                else
                    stack.pop();
            }
        }

        if (stack.isEmpty())
            return "yes";
        else
            return "no";
    }
}


profile
그래야만 한다
post-custom-banner

0개의 댓글