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

[Java] BOJ 9012 ๊ด„ํ˜ธ

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

๋ฌธ์ œ 

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

    • ๊ด„ํ˜ธ ๋ฌธ์ž์—ด(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์„ ํ•˜๊ณ  ')'๊ฐ€ ๋“ค์–ด์˜ค๋ฉด -1์„ ํ•œ๋‹ค.
  • ๋งŒ์•ฝ ๋ณ€์ˆ˜๊ฐ€ ๋งˆ์ด๋„ˆ์Šค๊ฐ€ ๋œ๋‹ค๋ฉด ์ˆœ์„œ๊ฐ€ ์ž˜๋ชป๋œ ๊ฒƒ์ด๋ฏ€๋กœ ๋ฐ˜๋ณต๋ฌธ์„ ์ข…๋ฃŒ ํ›„ "NO"๋ฅผ ์ถœ๋ ฅํ•˜๊ณ 
  • ๋ฐ˜๋ณต๋ฌธ์ด ๋๋‚ฌ๋Š”๋ฐ๋„ ๋ณ€์ˆ˜๊ฐ€ 0์ด ์•„๋‹ˆ๋ผ๋ฉด ๋‹ซํžˆ์ง€ ์•Š์€ ๊ด„ํ˜ธ๊ฐ€ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ "NO"๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • ๋ฐ˜๋ณต๋ฌธ์ด ์ข…๋ฃŒ๋œ ํ›„, ๋ณ€์ˆ˜๊ฐ€ 0์ด๋ผ๋ฉด "YES"๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.  

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

  • X

์•ž์—์„œ ํ’€์—ˆ๋˜ ๋ฌธ์ œ ๋•๋ถ„์— ๋‚˜๋ฆ„ ์‰ฝ๊ฒŒ ํ’€์—ˆ๋‹ค! ใ…Žใ…Ž

์ฝ”๋“œ

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

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

        int T = Integer.parseInt(br.readLine());

        for(int test = 0; test < T; test++){
            // vps์ธ์ง€ ํŒ๋ณ„ํ•  ๋ฌธ์ž์—ด
            String vps = br.readLine();

            // ๊ด„ํ˜ธ๊ฐ€ ๋งž๊ฒŒ ๋“ค์–ด์˜ค๋Š”์ง€ ํŒ๋ณ„ํ•  ๋ณ€์ˆ˜
            int cnt = 0;

            for(int i = 0; i < vps.length(); i++){
                // ๋งŒ์•ฝ ์—ฌ๋Š” ๊ด„ํ˜ธ๊ฐ€ ๋“ค์–ด์˜จ๋‹ค๋ฉด
                if(vps.charAt(i) == '('){
                    // ์นด์šดํŠธ + 1
                    cnt = cnt + 1;
                }
                // ๋‹ซ๋Š” ๊ด„ํ˜ธ๊ฐ€ ๋“ค์–ด์˜จ๋‹ค๋ฉด
                else if(vps.charAt(i) == ')'){
                    // ์นด์šดํŠธ - 1
                    cnt = cnt - 1;
                }

                // ๋งŒ์•ฝ ์นด์šดํŠธ๊ฐ€ ๋งˆ์ด๋„ˆ์Šค๋ผ๋ฉด ๊ด„ํ˜ธ์˜ ์ˆœ์„œ๊ฐ€ ์ž˜๋ชป๋๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ
                // ๋ฐ˜๋ณต๋ฌธ ์ข…๋ฃŒ
                if(cnt < 0){
                    break;
                }
            }

            // ์นด์šดํŠธ๊ฐ€ 0์ด๋ฉด ์ˆœ์„œ์™€ ๊ฐœ์ˆ˜๊ฐ€ ๋ชจ๋‘ ๋งž์œผ๋ฏ€๋กœ YES ์ถœ๋ ฅ
            if(cnt == 0){
                sb.append("YES" + "\n");
            }
            // 0์ด ์•„๋‹ˆ๋ผ๋ฉด NO ์ถœ๋ ฅ
            else{
                sb.append("NO" + "\n");
            }
        }

        System.out.println(sb);
    }
}