Algorithm๐Ÿฅ‡

9012.๊ด„ํ˜ธ

hae02y 2023. 10. 16. 08:15
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

๊ด„ํ˜ธ ๋ฌธ์ž์—ด(Parenthesis String, PS)์€ ๋‘ ๊ฐœ์˜ ๊ด„ํ˜ธ ๊ธฐํ˜ธ์ธ โ€˜(โ€™ ์™€ โ€˜)โ€™ ๋งŒ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๋ฌธ์ž์—ด์ด๋‹ค. ๊ทธ ์ค‘์—์„œ ๊ด„ํ˜ธ์˜ ๋ชจ์–‘์ด ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์„ฑ๋œ ๋ฌธ์ž์—ด์„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด(Valid PS, VPS)์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ํ•œ ์Œ์˜ ๊ด„ํ˜ธ ๊ธฐํ˜ธ๋กœ ๋œ โ€œ( )โ€ ๋ฌธ์ž์—ด์€ ๊ธฐ๋ณธ VPS ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ๋งŒ์ผ x ๊ฐ€ VPS ๋ผ๋ฉด ์ด๊ฒƒ์„ ํ•˜๋‚˜์˜ ๊ด„ํ˜ธ์— ๋„ฃ์€ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด โ€œ(x)โ€๋„ VPS ๊ฐ€ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‘ VPS x ์™€ y๋ฅผ ์ ‘ํ•ฉ(concatenation)์‹œํ‚จ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด xy๋„ VPS ๊ฐ€ ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด โ€œ(())()โ€์™€ โ€œ((()))โ€ ๋Š” VPS ์ด์ง€๋งŒ โ€œ(()(โ€, โ€œ(())()))โ€ , ๊ทธ๋ฆฌ๊ณ  โ€œ(()โ€ ๋Š” ๋ชจ๋‘ VPS ๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž์—ด์ด๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์€ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด VPS ์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ํŒ๋‹จํ•ด์„œ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ YES ์™€ NO ๋กœ ๋‚˜ํƒ€๋‚ด์–ด์•ผ ํ•œ๋‹ค.

์ž…๋ ฅ

์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋Š” ํ‘œ์ค€ ์ž…๋ ฅ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ž…๋ ฅ์€ T๊ฐœ์˜ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ž…๋ ฅ์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ์˜ ์ฒซ์งธ ์ค„์—๋Š” ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด ํ•œ ์ค„์— ์ฃผ์–ด์ง„๋‹ค. ํ•˜๋‚˜์˜ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” 2 ์ด์ƒ 50 ์ดํ•˜์ด๋‹ค.

์ถœ๋ ฅ

์ถœ๋ ฅ์€ ํ‘œ์ค€ ์ถœ๋ ฅ์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋งŒ์ผ ์ž…๋ ฅ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด(VPS)์ด๋ฉด โ€œYESโ€, ์•„๋‹ˆ๋ฉด โ€œNOโ€๋ฅผ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฐจ๋ก€๋Œ€๋กœ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

์‹œ๊ฐ„ ์ œํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ ์ œ์ถœ ์ •๋‹ต ๋งžํžŒ ์‚ฌ๋žŒ ์ •๋‹ต ๋น„์œจ
1 ์ดˆ 128 MB 183445 85851 61777 45.727%

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

ํ’€์ด

๊ด„ํ˜ธ๋Š” ์—ฌ๋Š” ๊ด„ํ˜ธ ( ์™€ ๋‹ซ๋Š” ๊ด„ํ˜ธ ) ๊ฐ€ ํ•œ ์Œ์„ ์ด๋ฃจ์–ด์•ผ ํ•œ๋‹ค.
๊ทธ๋Ÿผ ์ด๋ฅผ ์Šคํƒ์— ์ ์šฉํ•ด๋ณด์ž. ์—ฌ๋Š” ๊ด„ํ˜ธ๊ฐ€ ์žˆ์„๋•Œ๋Š” ์Šคํƒ์— ์Œ“์•„์ฃผ๊ณ (PUSH), ๋‹ซ๋Š” ๊ด„ํ˜ธ๊ฐ€ ์žˆ์œผ๋ฉด ์Šคํƒ์—์„œ ํ•˜๋‚˜๋ฅผ ์ง€์›Œ์ฃผ๋ฉด(POP) ๋œ๋‹ค.

์ด์›๋ฆฌ๋ฅผ ์ ์šฉํ•˜๋ฉด 3๊ฐ€์ง€์˜ ๊ฒฝ์šฐ๋กœ ๋‚˜๋‰œ๋‹ค.

1. ์—ฌ๋Š” ๊ด„ํ˜ธ์™€ ๋‹ซ๋Š” ๊ด„ํ˜ธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅผ๋•Œ : ์ตœ์ข…์ ์ธ ์Šคํƒ์— ์•„๋ฌด๊ฒƒ๋„ ์—†์Œ
2. ๊ด„ํ˜ธ๊ฐ€ ๋‚จ๋Š”๊ฒฝ์šฐ(์—ฌ๋Š” ๊ด„ํ˜ธ๊ฐ€ ๋งŽ์„๋•Œ)
3. ๊ด„ํ˜ธ๊ฐ€ ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ(๋‹ซ๋Š” ๊ด„ํ˜ธ๊ฐ€ ๋งŽ์„๋•Œ)

1๋ฒˆ๊ณผ 2๋ฒˆ์€ ๋งˆ์ง€๋ง‰๊นŒ์ง€ for๋ฌธ์ด ์ •์ƒ์ ์œผ๋กœ ๋Œ๊ณ  ์Šคํƒ์— ๋‚จ๋Š”๊ฒƒ์ด ์žˆ๋Š”์ง€ ํŒ๋ณ„ํ• ๊ฒƒ์ด๊ณ ,
3๋ฒˆ์€ ๋๊นŒ์ง€ ๋Œ์ง€๋ชปํ•˜๊ณ  ๋นˆ์Šคํƒ์— POP์„ ํ•˜๊ฒŒ ๋˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.

์ด๋ฅผ ์ฝ”๋“œ๋กœ ์ ์šฉํ•˜์—ฌ ๋ณด์ž.

์ฝ”๋“œ

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

        int T = sc.nextInt();

        for(int i=0; i<T; i++){
            System.out.println(solve(sc.next()));
        }
    }

    public static String solve(String s){

        Stack<Character> stack = new Stack<>();

        for(int i=0; i< s.length(); i++){
            char c = s.charAt(i);

            if(c == '('){
                stack.push(c);
            }

            else if(stack.empty()){   //3๋ฒˆ ๊ฒฝ์šฐ
                return "NO";
            }

            else {
                stack.pop();
            }

        }

        if(stack.empty()){  //1๋ฒˆ ๊ฒฝ์šฐ
            return "YES";
        }
        else {              //2๋ฒˆ ๊ฒฝ์šฐ
            return "NO";
        }

    }
}
๋ฐ˜์‘ํ˜•