[백준] 10799: 쇠막대기

강은서·2022년 2월 7일
0

백준

목록 보기
21/21
post-thumbnail

문제

문제 풀이

문제는 다음과 같은 두가지 상황이 있다.
1. 열린괄호('(')인 경우

  • 열린괄호는 닫힌 괄호와 만나야 하므로 스택에 push한다.
  1. 닫힌괄호(')')인 경우
  • 닫힌 괄호는 두가지 경우를 가질 수 있다.
    • 2-1. 배열에서 바로 이전에 열린괄호가 있는 경우
      레이저이므로 현재 존재하는 쇠막대기 수만큼 즉, 스택에 존재하는 열린괄호(스택의 크기)만큼 result에 더해준다.
    • 2-2. 배열에서 바로 이전에 닫힌괄호가 있는 경우
      쇠막대기이므로, result에 1을 더해준다.

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;

public class ANS10799 {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        System.out.println(solve(st.nextToken()));

    }


    public static int solve(String s){
        Stack<Character> stack = new Stack<Character>();
        String arr[] = new String[s.length()];

        int result = 0;
        for(int i = 0 ; i < s.length(); i++){
            char c = s.charAt(i);
            arr[i] = String.valueOf(c);

            if(c == '('){
                stack.push(c);
            }
            else if( c == ')'){
                stack.pop();
                if(arr[i-1].equals("(")){
                    result += stack.size();
                }
                else{
                    result += 1;
                }
            }
        }
        return result;

    }
}

스택의 크기만큼 담는 방법까진 생각했는데 미처 배열 이전을 확인해 레이저인지 막대기인지 확인하는 것을 생각하지 못하였다 크흡0_0

0개의 댓글