본문 바로가기
[ 다먹살 ]/- Coding

[백준] 4949 균형잡힌 세상

by 엉망으로살기 2021. 10. 15.
반응형

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

 

4949번: 균형잡힌 세상

하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마

www.acmicpc.net

 

이 문제는 스택을 이용하는 문제인데 기존에 풀었던 프로그래머스 문제와 거의 똑같다.

(프로그래머스 레벨2 올바른괄호 : https://yoloaeee.tistory.com/5?category=954228) 

 

[프로그래머스] 레벨2 올바른 괄호

https://programmers.co.kr/learn/courses/30/lessons/12909?language=java 코딩테스트 연습 - 올바른 괄호 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입..

yoloaeee.tistory.com

 

스택을 이용해서 괄호의 짝을 찾아주면 되는 문제였다.

 


문제 및 입출력

 


예제

 


코드

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

public class Main
{
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        
        while(true)
        {
            String input = sc.nextLine();
            
            // '.' 이 입력되면 바로 종료
            if(input.equals("."))
            {
             break;
            }
            else
            {
                Stack<Character> s = new Stack<Character>();
                boolean flag = true;

                for(int i=0; i<input.length(); i++)
                {
                    char temp = input.charAt(i);
                
                    // '('와 '['는 스택에 바로 push
                    if(temp=='(' || temp=='[')
                    {
                        s.push(temp);
                    }
                    // 현재 문자가 ')' 일때, 스택의 top이 '(' 이면 pop
                    else if(temp==')')
                    {
                        if(!s.isEmpty() && s.peek()=='(')
                        {
                            s.pop();
                        }
                        else
                        {
                            flag = false;
                            break;
                        }
                    }
                    // 현재 문자가 ']' 일때, 스택의 top이 '[' 이면 pop
                    else if(temp==']')
                    {
                        if(!s.isEmpty() && s.peek()=='[')
                        {
                            s.pop();
                        }
                        else
                        {
                            flag = false;
                            break;
                        }
                    }
                }
            
                // 스택의 모든 괄호가 pop 되었고, 중간에 조건을 전부 만족할 경우
                if(flag && s.isEmpty())
                {
                    System.out.println("yes");
                }
                // 스택에 괄호가 남아있거나 중간 조건을 하나라도 불만족하는 경우
                else
                {
                    System.out.println("no");
                }
            }
        }
        
        sc.close();
    }
}

 

반응형

'[ 다먹살 ] > - Coding' 카테고리의 다른 글

[백준] 1475 방 번호  (0) 2021.10.19
[백준] 1874 스택 수열  (0) 2021.10.18
[백준] 10828 스택  (0) 2021.10.14
[백준] 10773 제로  (3) 2021.10.13
[백준] 10814 나이순정렬  (0) 2021.10.12

댓글