응애개발자
article thumbnail
728x90

문제

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

 

 

접근 방법

  1. '(' 가 있을때는 ')' 이것이 나와야 짝을이루고 '[' 이것이 있을때는 ']' 이것이 있어야 짝을 지으며 사라집니다.
  2. 따라서 스택을 이용해서 짝을 맞추어 삭제하고, 스택이 비어있거나 스택 최상단이 짝이 맞지 않으면 빠르게 리턴해 줍니다.
  3. 마지막에 스택이 비워졌으면 yes를 스택에 그래도 남아있으면 (짝이 맞지 않으면) no를 리턴해줍니다.

 

코드

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

public class Main {
    private static StringBuilder sb;
    private static BufferedReader br;
    private static Stack<Character> stack;

    //입력
    public static void input() throws Exception {
        br = new BufferedReader(new InputStreamReader(System.in));
        sb = new StringBuilder();

        while (true) {
            String line = br.readLine();

            if(line.charAt(0) == '.') break;

            sb.append(process(line)).append("\n");
        }
    }

    //실행
    public static String process(String line) {
        stack = new Stack<>();

        for(int i = 0 ; i < line.length(); i++){
          char c = line.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";

        return "no";
    }


    public static void main(String[] args) throws Exception {
        input();
        System.out.println(sb);
    }
}
profile

응애개발자

@Eungae-D

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!