๐Ÿ“ ๋ฌธ์ œ ์„ค๋ช…

  1. ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด(Valid Parenthesis String, VPS) ์ธ์ง€ ํŒ๋ณ„ํ•˜๋Š” ๋ฌธ์ œ
  2. ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด(VPS) ์ด๋ฉด โ€˜YESโ€™ ์ถœ๋ ฅ, ์•„๋‹ˆ๋ผ๋ฉด โ€˜NOโ€™๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. (ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ)

  3. ๊ด„ํ˜ธ ๋ฌธ์ž์—ด(Parenthesis String, PS)์ด๋ž€?
    • ๋‘๊ฐœ์˜ ๊ด„ํ˜ธ ๊ธฐํ˜ธ '('์™€ ')'๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด์ด๋ฉด ๋ชจ๋‘ OK
  4. ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด(Valid Parenthesis String, VPS)์ด๋ž€?
    • ๋‘๊ฐœ์˜ ๊ด„ํ˜ธ ๊ธฐํ˜ธ '('์™€ ')'์œผ๋กœ ์ด๋ฃจ์–ด์กŒ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๊ด„ํ˜ธ์˜ ๋ชจ์–‘์ด ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์„ฑ๋œ- ๊ด„ํ˜ธ์˜ ์ง์ด ์ •ํ™•ํžˆ ๋งž๋Š” ๋ฌธ์ž์—ด์„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด(VPS)์ด๋ผ๊ณ  ํ•œ๋‹ค.
    • ํ•œ์Œ์˜ ๊ด„ํ˜ธ ๊ธฐํ˜ธ๋กœ ๋œ "( )" ๋ฌธ์ž์—ด์€ ๊ธฐ๋ณธ VPS ์ด๋ผ๊ณ  ํ•œ๋‹ค.
    • ๋งŒ์ผ x๊ฐ€ VPS๋ผ๋ฉด, x๋ฅผ ํ•˜๋‚˜์˜ ๊ด„ํ˜ธ ์Œ(๊ธฐ๋ณธ VPS)์— ๋„ฃ์€ ๋ฌธ์ž์—ด "(x)"๋„ VPS๊ฐ€ ๋œ๋‹ค.
    • ๋งŒ์ผ x, y๊ฐ€ VPS๋ผ๋ฉด "xy"๋„ VPS๊ฐ€ ๋œ๋‹ค.

๋ฌธ์ œ ๋งํฌ


๐Ÿ’ก ์•„์ด๋””์–ด

  • ์Šคํƒ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋” ์ง„๋ณด๋œ ์ž๋ฃŒ๊ตฌ์กฐ์ธ Deque๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • '('๊ฐ€ ๋‚˜์˜ค๋ฉด ์Šคํƒ์— ๋„ฃ๋Š”๋‹ค. (์Œ“๋Š”๋‹ค)
  • ')'๊ฐ€ ๋‚˜์˜ค๋ฉด ์Šคํƒ์—์„œ โ€˜(โ€˜๋ฅผ ํ•˜๋‚˜ ๊บผ๋‚ด๊ณ , ์‚ญ์ œํ•œ๋‹ค.
    • ๊บผ๋‚ผ ๊ฒŒ ์žˆ์œผ๋ฉด VPS
    • ๊บผ๋‚ผ ๊ฒŒ ์—†์œผ๋ฉด ๋‹จ์ˆœ PS
  • ์—ฌ๋Š” ๊ด„ํ˜ธ๋Š” ๋‹จ์ˆœ push๋กœ ์Šคํƒ ๋‚ด๋ถ€์— ์‚ฝ์ž…ํ•˜๊ณ , ์Šคํƒ ๋‚ด๋ถ€์— ์‚ฝ์ž…๋˜๊ณ  ์‚ฝ์ž… ๋  ๋ฌธ์ž์—ด์ด ์—ฌ๋Š” ๊ด„ํ˜ธ ๋ฐ–์— ์—†์œผ๋ฏ€๋กœ ๋‹ซ๋Š” ๊ด„ํ˜ธ ๋˜ํ•œ ์Šคํƒ ์ตœ ์ƒ๋‹จ์˜ ๋ฌธ์ž์—ด์„ ๋‹จ์ˆœ popํ•œ๋‹ค.

๐Ÿ›  ์ฝ”๋“œ

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine());

        while (T-- > 0) {
            String input = br.readLine();
            Deque<Character> stack = new ArrayDeque<>();
            boolean isVPS = true;

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

                if (c == '(') {
                    stack.push(c);
                } else {
                    if (stack.isEmpty()) {
                        isVPS = false;
                        break;
                    }
                    stack.pop();
                }
            }

            System.out.println((isVPS && stack.isEmpty()) ? "YES" : "NO");
        }
    }
}

โฑ ์‹œ๊ฐ„๋ณต์žก๋„

O(T): ํ•˜์ง€๋งŒ ๋ฌธ์ž์—ด ๊ธธ์ด๊ฐ€ ์ตœ๋Œ€ 50์ด๋ฏ€๋กœ ์‚ฌ์‹ค์ƒ ์ƒ์ˆ˜ ์‹œ๊ฐ„ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.


โœ๏ธ ๋А๋‚€ ์ 

  • ์ฒ˜์Œ ํ’€๋•Œ๋Š” ๊ด„ํ˜ธ ์ง๋งž์ถ”๊ธฐ์—๋งŒ ์ง‘์ค‘ํ•ด์„œ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ํ’€์–ด์„œ ํ‹€๋ ธ๋‹ค.
  • ๋‹ซ๋Š” ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์˜ ์—ฌ๋Š” ๊ด„ํ˜ธ ๋ฌธ์ž์—ด ์„ ๋ณ„ ์กฐ๊ฑด ๊ฐ™์€๊ฒƒ๋„ ๊ณ ๋ฏผํ–ˆ๋‹ค.
  • ์Šคํƒ ๊ตฌ์กฐ๊ฐ€ ์ ํ•ฉํ•˜๋‹ค๋Š”๊ฑธ ๊ธˆ๋ฐฉ ๊นจ๋‹ฌ์•˜๊ณ , ๋ฌธ์ œ๋ฅผ ๋” ํ’€๋ฉด ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” ๊ธˆ๋ฐฉ ํ’€ ์ˆ˜ ์žˆ๊ฒ ์ง€.