본문 바로가기
Algorithm/백준 자바

백준 4949 자바

by 눈오는1월 2024. 1. 26.
728x90

<문제>

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

 

4949번: 균형잡힌 세상

각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에

www.acmicpc.net

 

<풀이>

무엇인가 짝짓는 문제 같은 경우 스택으로 풀어야 된다는 생각을 했다. 그래서 스택을 이용해서 문제를 해결했다.

스택을 이용해 괄호를 넣고, 해당 문제에서 ) ] 이러한 괄호가 들어왔을 때 스택이 비어있거나, 스택에 최상단에 있는 문자가 짝을 지을 수 없는 괄호 일경우 해당 문자열은 균형 잡힌 문자열이 아닌 것을 바로 알 수 있기 때문에 더 이상 확인하지 않고 바로 no를 출력하면 되기 때문에 효율성을 위해 문자열 검사하는 함수를 만들어서 구현했다.

문자가 ( , [ 이러한 문자열이 들어오면 스택에 넣는다.

문자가 ) 일때, 스택이 비어있거나 스택의 최상단 문자가 ( 가 아닐 경우 문자열 no를 리턴한다. 조건이 아닐 경우에는 스택을 pop 한다.

문자가 ]일 때 스택이 비어있거나 스택의 최상단 문자가 ]가 아닐 경우 문자열 no를 리턴한다.  조건이 아닐 경우에는 스택을 pop 한다.

모든 문자를 확인한 후에 스택이 비어있으면 yes를 리턴하고 스택이 비어있지 않을 경우 no를 리턴한다.

 

<코드>

import java.io.*;
import java.util.*;
public class Main {
    public static void main(String[] args)throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        String s;
        while(true) {
            s = br.readLine();
            String result = f(s);
            if(s.equals(".")) break;
            sb.append(result + "\n");

        }
        System.out.println(sb);
    }

    public static String f(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.empty() || stack.peek() != '(') return "no";
                else stack.pop();
            }
            else if(c == ']') {
                if(stack.empty() || stack.peek() != '[') return "no";
                else stack.pop();
            }
        }
        if(stack.empty()) return "yes";
        else return "no";
    }

}
728x90

'Algorithm > 백준 자바' 카테고리의 다른 글

백준 1068 자바  (0) 2024.02.15
백준 14502 자바  (1) 2024.01.27
백준 1620 자바  (0) 2024.01.09
백준 9996 자바  (1) 2024.01.09
백준 11655 자바  (1) 2024.01.03