코딩 테스트 풀이 11 - 괄호

배효림·2023년 3월 20일
0

코딩테스트

목록 보기
11/20

✔ 문제

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

💡 접근 방법

문자열을 iterate 하며 아래 조건에 따라 스택에 넣고 뺐다 :

  1. stack 이 empty 하다면 문자를 스택에 넣는다
  2. empty하지 않다면 stack의 top 과 넣을 문자를 비교한다
    1. 같다면 문자를 stack에 넣는다 - (( , )) 인 경우
    2. 다르다면
      1. stack의 top 이 ) 라면 문자를 stack에 넣는다 - )( 인 경우
      2. 아니라면 stack 의 top 을 pop한다. - () 인 경우

그 뒤 stack 이 empty 하다면 올바른 괄호를 가졌으니 YES 리턴 , 아니라면 NO 리턴을 하였다.

⭐ 코드

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 inputNum = Integer.parseInt(br.readLine());

        // Input 처리
        String[] inputStr = new String[inputNum];
        for (int i = 0; i < inputNum ; ++i)
        {
            inputStr[i] = br.readLine();
        }

        for (String s : inputStr)
        {
            Stack<Character> myStack = new Stack<>();
            myStack.push((s.charAt(0)));

            for (int j = 1; j < s.length(); ++j)
            {
                Character character = s.charAt(j);

                if (myStack.isEmpty())
                {
                    // Empty 하다면 그냥 push
                    myStack.push(character);
                }
                else
                {
                    Character currentChar = myStack.peek();
                    if (currentChar.equals(character))
                    {
                        // 같다면 push
                        myStack.push(character);
                    }
                    else if (currentChar.equals(')') && character.equals('('))
                    {
                        // 다르지만 valid 한 형태가 아닌 경우
                        myStack.push(character);
                    }
                    else
                    {
                        // 다르다면 remove
                        myStack.pop();
                    }

                }
            }

            System.out.println(myStack.isEmpty() ? "YES" : "NO");
        }

    }
}
profile
항상 위를 바라보는 프로그래머

0개의 댓글