[Baekjoon] - 9012. ๊ด„ํ˜ธ(S4)

์˜ค๋™ํ›ˆยท2022๋…„ 1์›” 3์ผ
0

Baekjoon

๋ชฉ๋ก ๋ณด๊ธฐ
12/58
post-thumbnail

1. 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โ€๋ฅผ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฐจ๋ก€๋Œ€๋กœ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

์˜ˆ์ œ ์ž…๋ ฅ์˜ˆ์ œ ์ถœ๋ ฅ
6
(())())
(((()())()
(()())((()))
((()()(()))(((())))()
()()()()(()()())()
(()((())()(
NO
NO
YES
NO
YES
NO
3
((
))
())(()
NO
NO
NO

2. Logic ๐Ÿ‘จโ€๐Ÿซ

์ด๋Ÿฐ ๋ฌธ์ œ๋Š” stack์„ ์ด์šฉํ•ด ํ•ด๊ฒฐํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๋‹ค. ์ฒ˜์Œ์— counting ํ•ด์„œ ์Œ์ˆ˜๊ฐ€ ๋˜๋ฉด NO๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ์ถ”๊ฐ€ ์˜ต์…˜๋“ค์„ ์ง€์ •ํ•ด NO๋ฅผ ํŒ๋ณ„ํ–ˆ๋Š”๋ฐ, ์ด ๋ฐฉ๋ฒ•๋ณด๋‹ค๋Š” stack์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ๊ฐ„๋‹จํ•˜๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ฐ™์ด ํ•œ๋ฒˆ ์•Œ์•„๋ด๋ณด์ž!

Logic
1. stack์ด ๋น„์–ด์žˆ๋‹ค๋ฉด ์ƒˆ๋กœ์šด ๊ฐ’ ์ถ”๊ฐ€
2. '('๋ฅผ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค๋ฉด stack์— ์ถ”๊ฐ€
3. ')'๋ฅผ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค๋ฉด stack ๋งˆ์ง€๋ง‰ ๊ฐ’์ด '(' ์˜€๋Š”์ง€ ์ฒดํฌํ•˜๊ณ  ๋งž์œผ๋ฉด pop ํ•˜๊ธฐ
4. ์ž…๋ ฅ ๋ฐ›์€ ๋ฌธ์ž ์ „์ฒด๋ฅผ ์ฒดํ‚นํ•œ ํ›„ stack์˜ ๊ธธ์ด๊ฐ€ ๋‚จ์•„์žˆ์œผ๋ฉด VPS๊ฐ€ ์•„๋‹Œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— NO ๋ฐ˜ํ™˜

3. Code ๐Ÿ’ป

1. ๋‚ด๊ฐ€ ํ‘ผ ์ฝ”๋“œ ๐Ÿ˜

def checkVPS(vps):
    stack = []
    for i in range(len(vps)):
        if len(stack) == 0:
            stack.append(vps[i])
        elif vps[i] == '(':
            stack.append(vps[i])
        elif vps[i] == ')':
            if stack[-1] == '(':
                stack.pop()
            else:
                break
    if len(stack) != 0:
        print('NO')
    else:
        print('YES')

N = int(input())
for i in range(N):
    vps = input()
    checkVPS(vps)
profile
์‚ฝ์งˆ์˜ ๊ธฐ๋ก๋“ค๐Ÿฅ

0๊ฐœ์˜ ๋Œ“๊ธ€