본문 바로가기

백준/Data Structures

백준 4949 자바

반응형

 

백준 Stack 문제입니다.

 

백준 9012 자바 (tistory.com)

 

백준 9012 자바

백준 Stack 문제입니다. 간단할 수도 있지만 나름 구현해보려고 하면 시간이 좀 걸리는 문제입니다. 풀이 과정은 이렇습니다. 1. '('가 들어오면 Stack에 push 2.')'가 들어오면 Stack 안에 '('가 있으면 St

cj4789.tistory.com

4949번 문제보다 쉬운 문제가 9012번이니 저 문제를 참고하시면 금방 해결할 수 있습니다.

풀이 과정은 이러합니다.

1. '(' 또는 '['  들어오면 Stack에 push

2. ')'가 들어오면 Stack이 비어있거나 (Stack이 비어있으면 뒤에 어떤 문자가 와도 )를 지울 수 없습니다.) 스택의 맨 윗 원소가 '('가 아니라면 바로 no 리턴

2-1. ')'가 들어왔을 때 위의 경우가 아니라면 Stack에서 pop (이 때 pop되는 문자는 Stack 안에 있던 '(' 입니다.)

 

Stack 안에 넣는 것은 '(', '[' 이고 ')', ']'는 Stack 안에 있는 여는 괄호들을 없애거나 바로 no를 return 시키는 역할을 합니다.

그래서 마지막에 Stack이 비어 있어야 yes를 출력할 수 있습니다.

 

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();

       while (true) {

           String s = br.readLine();

           if(s.equals(".")) break;
           sb.append(sol(s)).append('\n');
       }
        System.out.println(sb);
    }
    public static String sol (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.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";
        } else {
            return "no";
        }
    }
}

 

반응형

'백준 > Data Structures' 카테고리의 다른 글

백준 17608 자바  (0) 2022.08.23
백준 2161 자바  (0) 2022.08.22
백준 9012 자바  (0) 2022.08.22
백준 10845 자바  (0) 2022.08.19
백준 10828 자바  (0) 2022.08.19