๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ’ป Computer Science/- Data Structure, Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜ PS] Stack์„ ์ด์šฉํ•ด์„œ Java๋กœ ์ˆ˜์‹ ๋‚ด ๊ด„ํ˜ธ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌํ•˜๊ธฐ

by Wonit 2021. 1. 14.

๋ฌธ์ œ

๊ด„ํ˜ธ( ), { }, [ ]๊ฐ€ ํฌํ•จ๋œ ์ˆ˜์‹์„ ์ž…๋ ฅ ๋ฐ›๊ณ  ํ•ด๋‹น ์ˆ˜์‹์˜ ๊ด„ํ˜ธ๊ฐ€ ์ž˜ ๋‹ซํ˜€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ผ.

์˜ˆ์ œ ์ž…๋ ฅ & ์ถœ๋ ฅ

$ 2 * (3 + 10)) - 1 + [(10 + 10 + {20 + 1})]
$ ์ •๋‹ต

$ (3 + 10) * ((3) * 2 / 4) - 1 + [{(10 + 10 + {20 + 1})]
$ ์˜ค๋ฅ˜

 

์ •๋‹ต ์ฝ”๋“œ

 

์ ‘๊ทผ ๋ฐฉ๋ฒ•

์—ฌ๋Š” ๊ด„ํ˜ธ๋“ค์„ ๋งŒ๋‚  ๋•Œ ๋งˆ๋‹ค stack์— ์ถ”๊ฐ€ํ•˜๊ณ  ๋‹ซ๋Š” ๊ด„ํ˜ธ๋ฅผ ๋งŒ๋‚  ๋•Œ ๋งˆ๋‹ค stack์—์„œ popํ•œ๋‹ค.


๋‹จ, ์ด ๊ณผ์ •์—์„œ stack์—์„œ pop ํ•œ ๊ด„ํ˜ธ๊ฐ€ ๋‹ซ๋Š” ๊ด„ํ˜ธ์˜ ์ง์ด ๋งž๋Š”์ง€๋ฅผ ๊ฒ€์ฆํ•œ๋‹ค.

 

์˜ค๋‹ต ํ›„๋ณด

์˜ค๋‹ต์ธ ๊ฒฝ์šฐ์˜ ํ›„๋ณด๋ฅผ ๋ฏธ๋ฆฌ ์ •ํ•ด๋ณด์ž.

  1. ์˜ˆ์™ธ ํ›„๋ณด : stack ์ด ๋น„์–ด์žˆ๋Š”๋ฐ )}]๋ฅผ ๋งŒ๋‚˜์„œ pop ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ
  2. ์˜ˆ์™ธ ํ›„๋ณด : ๋ฌธ์ž์—ด ๊ฒ€์ฆ์ด ๋๋‚ฌ๋Š”๋ฐ stack ์ด ๋น„์–ด์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ
  3. ์˜ˆ์™ธ ํ›„๋ณด : stack ์—์„œ pop ํ•œ ๊ฐ’๊ณผ ์˜ˆ์ƒ ๊ฐ’์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ
import java.util.Stack;

public class Main {

    /* ์˜ˆ์™ธ 1 : stack ์ด ๋น„์–ด์žˆ๋Š”๋ฐ )}]๋ฅผ ๋งŒ๋‚˜์„œ pop ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ
    *  ์˜ˆ์™ธ 2 : ๋ฌธ์ž์—ด ๊ฒ€์ฆ์ด ๋๋‚ฌ๋Š”๋ฐ stack ์ด ๋น„์–ด์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ
    *  ์˜ˆ์™ธ 3 : stack ์—์„œ pop ํ•œ ๊ฐ’๊ณผ ์˜ˆ์ƒ ๊ฐ’์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ
    **/

    public static void main(String[] args) {
        Stack<Character> stack = new Stack<>();
        String correct = "2 * (3 + 10)) - 1 + [(10 + 10 + {20 + 1})]";
        String incorrect = "[(({(])}))";
        int answer = 0;
        char[] arr = correct.toCharArray();

        for(char iter : arr) {
            pushStack(stack, iter);
            answer = checkCondition(stack, iter);
            if(answer != 0) break;
        }
        if(stack.isEmpty() && answer == 0) System.out.println("์ •๋‹ต"); // ์˜ˆ์™ธ 2 ๊ฒ€์ฆ
        else System.out.println("์˜ค๋‹ต");
    }

    private static void pushStack(Stack<Character> stack, char c) {
        if((c == '(') || (c == '{') || (c == '[')) {
            stack.push(c);
        }
    }

    private static int checkCondition(Stack<Character> stack, char c) {
        if((c == ')') || (c == '}') || (c == ']')) {
            if(stack.isEmpty()) return 1; // ์˜ˆ์™ธ 1
            else { // ์˜ˆ์™ธ 3
                char pop = stack.pop();
                if( (pop == '(' && c == ')')
                        || (pop == '{' && c == '}')
                        || (pop == '[' && c == ']')) return 0;
                else return 3;
            }
        }
        return 0;
    }
}

๋Œ“๊ธ€