๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜

[Java] BOJ 4949 ๊ท ํ˜•์žกํžŒ ์„ธ์ƒ

by ๐ŸŠ๊ทค๐ŸŠ 2024. 7. 19.

๋ฌธ์ œ 

๋ฌธ์ œ ๋งํฌ https://www.acmicpc.net/problem/4949

  • ๋ฌธ์ž์—ด์— ํฌํ•จ๋˜๋Š” ๊ด„ํ˜ธ๋Š” ์†Œ๊ด„ํ˜ธ("()") ์™€ ๋Œ€๊ด„ํ˜ธ("[]")๋กœ 2์ข…๋ฅ˜์ด๊ณ , ๋ฌธ์ž์—ด์ด ๊ท ํ˜•์„ ์ด๋ฃจ๋Š” ์กฐ๊ฑด์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.
    • ๋ชจ๋“  ์™ผ์ชฝ ์†Œ๊ด„ํ˜ธ("(")๋Š” ์˜ค๋ฅธ์ชฝ ์†Œ๊ด„ํ˜ธ(")")์™€๋งŒ ์ง์„ ์ด๋ค„์•ผ ํ•œ๋‹ค.
    • ๋ชจ๋“  ์™ผ์ชฝ ๋Œ€๊ด„ํ˜ธ("[")๋Š” ์˜ค๋ฅธ์ชฝ ๋Œ€๊ด„ํ˜ธ("]")์™€๋งŒ ์ง์„ ์ด๋ค„์•ผ ํ•œ๋‹ค.
    • ๋ชจ๋“  ์˜ค๋ฅธ์ชฝ ๊ด„ํ˜ธ๋“ค์€ ์ž์‹ ๊ณผ ์ง์„ ์ด๋ฃฐ ์ˆ˜ ์žˆ๋Š” ์™ผ์ชฝ ๊ด„ํ˜ธ๊ฐ€ ์กด์žฌํ•œ๋‹ค.
    • ๋ชจ๋“  ๊ด„ํ˜ธ๋“ค์˜ ์ง์€ 1:1 ๋งค์นญ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฆ‰, ๊ด„ํ˜ธ ํ•˜๋‚˜๊ฐ€ ๋‘˜ ์ด์ƒ์˜ ๊ด„ํ˜ธ์™€ ์ง์ง€์–ด์ง€์ง€ ์•Š๋Š”๋‹ค.
    • ์ง์„ ์ด๋ฃจ๋Š” ๋‘ ๊ด„ํ˜ธ๊ฐ€ ์žˆ์„ ๋•Œ, ๊ทธ ์‚ฌ์ด์— ์žˆ๋Š” ๋ฌธ์ž์—ด๋„ ๊ท ํ˜•์ด ์žกํ˜€์•ผ ํ•œ๋‹ค.
  • ์ •๋ฏผ์ด๋ฅผ ๋„์™€ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ๊ท ํ˜•์žกํžŒ ๋ฌธ์ž์—ด์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ํŒ๋‹จํ•ด๋ณด์ž.
  • ๊ฐ ๋ฌธ์ž์—ด์€ ๋งˆ์ง€๋ง‰ ๊ธ€์ž๋ฅผ ์ œ์™ธํ•˜๊ณ  ์˜๋ฌธ ์•ŒํŒŒ๋ฒณ, ๊ณต๋ฐฑ, ์†Œ๊ด„ํ˜ธ("( )"), ๋Œ€๊ด„ํ˜ธ("[ ]")๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ์˜จ์ (".")์œผ๋กœ ๋๋‚˜๊ณ , ๊ธธ์ด๋Š” 100๊ธ€์ž๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.
  • ์ž…๋ ฅ์˜ ์ข…๋ฃŒ์กฐ๊ฑด์œผ๋กœ ๋งจ ๋งˆ์ง€๋ง‰์— ์˜จ์  ํ•˜๋‚˜(".")๊ฐ€ ๋“ค์–ด์˜จ๋‹ค.
  • ๊ฐ ์ค„๋งˆ๋‹ค ํ•ด๋‹น ๋ฌธ์ž์—ด์ด ๊ท ํ˜•์„ ์ด๋ฃจ๊ณ  ์žˆ์œผ๋ฉด "yes"๋ฅผ, ์•„๋‹ˆ๋ฉด "no"๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
 

์•„์ด๋””์–ด

  • stack์„ ์จ์„œ ์—ฌ๋Š” ์ž‘์€ ๊ด„ํ˜ธ๊ฐ€ ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค "s"๋ฅผ ๋„ฃ๊ณ  ์—ฌ๋Š” ํฐ ๊ด„ํ˜ธ๊ฐ€ ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค "b"๋ฅผ ๋„ฃ์—ˆ๋‹ค.
  • ๋‹ซ๋Š” ์ž‘์€ ๊ด„ํ˜ธ๊ฐ€ ๋“ค์–ด์™”์„ ๋•Œ, ๋งˆ์ง€๋ง‰์— ๋“ค์–ด์˜จ๊ฒŒ "s"๋ผ๋ฉด stack์—์„œ ๋งจ ์œ„์— ๋ฌธ์ž๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋ฐ˜๋ณต๋ฌธ์„ ๊ณ„์†ํ•˜์ง€๋งŒ, ๋งŒ์•ฝ ๋งจ ์œ„์— ์žˆ๋Š” ๋ฌธ์ž๊ฐ€ "s"๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒํ•œ๋‹ค.
  • ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‹ซ๋Š” ํฐ ๊ด„ํ˜ธ๊ฐ€ ๋“ค์–ด์™”์„ ๋•Œ, ๋งˆ์ง€๋ง‰์— ๋“ค์–ด์˜จ๊ฒŒ "b"๋ผ๋ฉด  stack์—์„œ ๋งจ ์œ„์— ๋ฌธ์ž๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋ฐ˜๋ณต๋ฌธ์„ ๊ณ„์†ํ•˜์ง€๋งŒ, ๋งŒ์•ฝ ๋งจ ์œ„์— ์žˆ๋Š” ๋ฌธ์ž๊ฐ€ "b"๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒํ•œ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ์–ด๋–ค ๋‹ซ๋Š” ๊ด„ํ˜ธ๋“  ๋‹ซ๋Š” ๊ด„ํ˜ธ๊ฐ€ ๋“ค์–ด์™”๋Š”๋ฐ stack์ด ๋น„์–ด์žˆ๋‹ค๋ฉด ๋‹ซ๋Š” ๊ด„ํ˜ธ๊ฐ€ ์—ฌ๋Š” ๊ด„ํ˜ธ๋ณด๋‹ค ๋จผ์ € ๋“ค์–ด์™€์„œ ์ˆœ์„œ๊ฐ€ ์ž˜๋ชป๋๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒํ•œ๋‹ค.
  • ๋ฐ˜๋ณต๋ฌธ์ด ๋งˆ์ง€๋ง‰๊นŒ์ง€ ๋‹ค ๋ˆ ํ›„, ๋งŒ์•ฝ stack์ด ๋น„์–ด์žˆ๋‹ค๋ฉด ๋ฌธ์žฅ์˜ ๊ท ํ˜•์ด ๋งž๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ  "yes"๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  stack์ด ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด ๋ฌธ์žฅ์˜ ๊ท ํ˜•์ด ๋งž์ง€ ์•Š๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ "no"๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. 

๊ฒช์€ ์‹œํ–‰์ฐฉ์˜ค

  • ์ฒ˜์Œ์— ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ๊ณ„์† ๋‚˜์„œ ๋ญ๊ฐ€ ๋ฌธ์ œ์ธ๊ฐ€ ํ–ˆ๋‹ค... ์•Œ๊ณ ๋ณด๋‹ˆ ๋ฌธ์žฅ์„ ์ž…๋ ฅ๋ฐ›๊ณ  ๋ฌธ์ž์— ์ ‘๊ทผํ•  ๋•Œ, 's.split("")[i]' ์ด๋Ÿฐ์‹์œผ๋กœ ์ ‘๊ทผํ–ˆ๋Š”๋ฐ ์ด ๋ถ€๋ถ„์—์„œ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ๋‚˜๋Š” ๊ฒƒ์ด์˜€๋‹ค...
  • ๊ทธ๋ž˜์„œ ์ € ๋ถ€๋ถ„์„ 's.charAt[i]'๋กœ ๋ฐ”๊ฟ”์ฃผ๋‹ˆ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๊ฐ€ ๋‚˜์ง€ ์•Š์•˜๋‹ค... ใ…œใ…œ ์•ž์œผ๋กœ๋„ split()์œผ๋กœ ๋ฌธ์ž๋ฅผ ์ ‘๊ทผํ•˜๊ธฐ ๋ณด๋‹จ charAt[]์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ๊ฒ ๋‹ค... 

๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ์˜ ์ด์œ ๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ์—ˆ๋‹ค.... ใ…œใ…œ
๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ๋ฅผ ์กฐ์‹ฌํ•˜์ž...!

์ฝ”๋“œ

import java.io.*;
import java.util.*;

public class BOJ4949 {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        while(true){
            // ์ž…๋ ฅ๋˜๋Š” ํ•œ ๋ฌธ์žฅ
            String s = br.readLine();

            // ๋ฌธ์žฅ์˜ ๊ธธ์ด
            int s_len = s.length();

            Stack<String> smb = new Stack<>();

            // ๋งŒ์•ฝ ๋ฌธ์žฅ์˜ ์‹œ์ž‘์ด ๊ธธ์ด์™€ ๊ฐ™์•„์กŒ์„ ๋•Œ
            if(s_len == 1){
                // ๋งŒ์•ฝ ๊ทธ ๋ฌธ์žฅ์ด '.' ํ•˜๋‚˜๋ผ๋ฉด
                if(s.equals(".")){
                    // ์ข…๋ฃŒ
                    break;
                }
            }

            for(int i = 0; i < s_len; i++){
                //๋งŒ์•ฝ ์†Œ๊ด„ํ˜ธ ์—ฌ๋Š”๊ฒŒ ํ•˜๋‚˜ ์žˆ๋‹ค๋ฉด ์Šคํƒํ…Œ s๋ฅผ ๋„ฃ์Œ
                if(s.charAt(i) == '('){
                    smb.add("s");
                }
                // ๋งŒ์•ฝ ์†Œ๊ด„ํ˜ธ ๋‹ซ๋Š”๊ฒŒ ํ•˜๋‚˜ ์žˆ๋‹ค๋ฉด ์นด์šดํŠธ์—์„œ - 1
                else if(s.charAt(i) == ')'){
                    // ๋งŒ์•ฝ ์Šคํƒ์ด ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด
                    if(!smb.empty()){
                        String stk = smb.peek();

                        // ๋งŒ์•ฝ ์ตœ๊ทผ์— ๋“ค์–ด์˜จ๊ฒŒ ์†Œ๊ด„ํ˜ธ๋ผ๋ฉด ๋‹ซ๋Š” ์ˆœ์„œ๊ฐ€ ๋งž์œผ๋ฏ€๋กœ pop
                        if(stk.equals("s")){
                            smb.pop();
                        }
                        else{
                            sb.append("no" + "\n");
                            break;
                        }
                    }
                    // ๋งŒ์•ฝ ๋น„์–ด์žˆ๋‹ค๋ฉด ์—ฌ๋Š”๊ฒŒ ์—†๋Š”๋ฐ ๋‹ซ๋Š”๊ฒŒ ๋“ค์–ด์˜จ ๊ฒƒ์ด๋ฏ€๋กœ ๋ฐ˜๋ณต๋ฌธ ์ข…๋ฃŒ
                    else{
                        sb.append("no" + "\n");
                        break;
                    }
                }
                // ๋งŒ์•ฝ ๋Œ€๊ด„ํ˜ธ ์—ฌ๋Š”๊ฒŒ ํ•˜๋‚˜ ์žˆ๋‹ค๋ฉด ์Šคํƒํ…Œ b๋ฅผ ๋„ฃ์Œ
                else if(s.charAt(i) == '['){
                    smb.add("b");
                }
                // ๋งŒ์•ฝ ๋Œ€๊ด„ํšจ ๋‹ซ๋Š”๊ฒŒ ํ•˜๋‚˜ ์žˆ๋‹ค๋ฉด
                else if(s.charAt(i) == ']'){
                    // ๋งŒ์•ฝ ์Šคํƒ์ด ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด
                    if(!smb.empty()){
                        String stk = smb.peek();

                        // ๋งŒ์•ฝ ์ตœ๊ทผ์— ๋“ค์–ด์˜จ๊ฒŒ ๋Œ€๊ด„ํ˜ธ๋ผ๋ฉด ๋‹ซ๋Š” ์ˆœ์„œ๊ฐ€ ๋งž์œผ๋ฏ€๋กœ pop์œผ๋กœ ๋บŒ
                        if(stk.equals("b")){
                            smb.pop();
                        }
                        // ์•„๋‹ˆ๋ผ๋ฉด "no"์ถœ๋ ฅ
                        else{
                            sb.append("no" + "\n");
                            break;
                        }
                    }
                    // ๋งŒ์•ฝ ๋น„์–ด์žˆ๋‹ค๋ฉด ์—ฌ๋Š”๊ฒŒ ์—†๋Š”๋ฐ ๋‹ซ๋Š”๊ฒŒ ๋“ค์–ด์˜จ ๊ฒƒ์ด๋ฏ€๋กœ ๋ฐ˜๋ณต๋ฌธ ์ข…๋ฃŒ
                    else{
                        sb.append("no" + "\n");
                        break;
                    }
                }

                // ๋ฐ˜๋ณต๋ฌธ์˜ ๋งˆ์ง€๋ง‰์ด ๋œ๋‹ค๋ฉด
                if(i == (s_len - 1)){
                    if(smb.empty()){
                        sb.append("yes" + "\n");
                    }
                    // ๋งŒ์•ฝ ๋ฐ˜๋ณต๋ฌธ์ด ๋๋‚˜๊ณ  ์†Œ๊ด„ํ˜ธ์™€ ๋Œ€๊ด„ํ˜ธ์˜ ์นด์šดํŠธ๊ฐ€ 0์ด ์•„๋‹ˆ๋ผ๋ฉด
                    // ๋‚จ๋Š”๊ฒŒ ์žˆ๊ฑฐ๋‚˜ ์ˆœ์„œ๊ฐ€ ์ž˜๋ชป๋๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ "no" ์ถœ๋ ฅ
                    else{
                        sb.append("no" + "\n");
                    }
                }

            }
        }

        System.out.println(sb);
    }
}

 

'์•Œ๊ณ ๋ฆฌ์ฆ˜' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Java] BOJ 10773 ์ œ๋กœ  (0) 2024.07.20
[Java] BOJ 9012 ๊ด„ํ˜ธ  (2) 2024.07.19
[Java] BOJ 2839 ์„คํƒ• ๋ฐฐ๋‹ฌ  (0) 2024.07.18
[Java] BOJ 2164 ์นด๋“œ2  (0) 2024.07.18
[Java] BOJ 1920 ์ˆ˜ ์ฐพ๊ธฐ  (0) 2024.07.17