πŸ’» Coding Problems Solving/Stack | Queue

[BOJ 2504] κ΄„ν˜Έμ˜ κ°’

Kim_dev 2022. 6. 26. 15:42

[BOJ 2504] κ΄„ν˜Έμ˜ κ°’

 

1. 문제 : Link

(μ•ˆ) X2

[μ•ˆ] X3

같은 κ΄„ν˜Έ μ•ˆμ€ +

 

ex) ( ( ) [ [ ] ] ) 

[[]] = [] μ•ˆμ— []  = 3 X 3

() + [[]] = 2 + 9 = 11

(()+[[]]) = 11 X 2 = 22

 

2. 풀이

μŠ€νƒν’€λ•Œ μ•žμœΌλ‘œ case둜 κΉ”λ”ν•˜κ²Œ μ²˜λ¦¬ν•˜κΈ°

ν•΄λ‹Ή κ΄„ν˜Έ μ•ˆμ—μ„œ κ³±μ…ˆμ΄ μœ μ§€λ˜λŠ” κ°œλ…μ„ μ–΄λ–»κ²Œ κ΅¬ν˜„ν•˜λŠ”μ§€κ°€ μ€‘μš”

μ—¬κΈ°μ„œλŠ” (,[κ°€ μΆ”κ°€λ λ•Œλ§ˆλ‹€ 값을 κ³±ν•΄μ£Όκ³  -> μœ μ§€

κ·ΈλŸ¬λ‹€κ°€ ),]κ°€ λ‚˜μ™”μ„λ•Œ λ‚˜λˆ μ£ΌκΈ°

()같은 쌍이 λ‚˜μ˜¬λ•Œ κ²°κ΅­ μ΅œμ’…κ°’μ΄ 결과에 λ”ν•΄μ§€λŠ” κ°œλ…

 

 

3. μ½”λ“œ

import java.util.*;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String in = scanner.next();

        int mul = 1;
        int result = 0;
        Stack<Character> stack = new Stack<>();
        for (int i = 0; i < in.length(); i++) {
            switch (in.charAt(i)) {
                case '(':
                    stack.push('(');
                    mul *= 2;
                    break;
                case '[':
                    stack.push('[');
                    mul *= 3;
                    break;
                case ')':
                    if (stack.isEmpty() || stack.peek() != '(') {
                        result = 0;
                        break;
                    }
                    if (in.charAt(i - 1) == '(') result += mul;
                    stack.pop();
                    mul /= 2;
                    break;
                case ']':
                    if (stack.isEmpty() || stack.peek() != '[') {
                        result = 0;
                        break;
                    }
                    if (in.charAt(i - 1) == '[') result += mul;
                    stack.pop();
                    mul /= 3;
                    break;
            }
        }

        System.out.println(!stack.isEmpty() ? 0 : result);
    }
}