[BOJ] 2504. ๊ด„ํ˜ธ์˜ ๊ฐ’(๐Ÿฅ‡, ์Šคํƒ/ํ)

lemythe423ยท2023๋…„ 7์›” 7์ผ
0

BOJ ๋ฌธ์ œํ’€์ด

๋ชฉ๋ก ๋ณด๊ธฐ
10/133
post-thumbnail

๋ฌธ์ œ

ํ’€์ด

์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•œ ํ’€์ด

  • ๊ด„ํ˜ธ
    ์—ด๋ฆฐ ๊ด„ํ˜ธ((, [) ๋ผ๋ฉด ๋ฌด์กฐ๊ฑด ์Šคํƒ์— ๋„ฃ๊ณ , ๋‹ซํžŒ ๊ด„ํ˜ธ(), ])๋ผ๋ฉด ์Šคํƒ์— ์ง์ด ๋งž๋Š” ์—ด๋ฆฐ ๊ด„ํ˜ธ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹

  • ์ˆซ์ž
    ๋ชจ๋“  ๊ด„ํ˜ธ๋“ค์˜ ์ง์ด ๋งž๋‹ค๊ณ  ๊ฐ€์ •

  • ์—ด๋ฆฐ ๊ด„ํ˜ธ + ๋‹ซํžŒ ๊ด„ํ˜ธ : ๋ฐ”๋กœ ์ˆซ์ž๋ฅผ ์ถ”๊ฐ€

  • ์ˆซ์ž + ์ˆซ์ž : ๋‘ ๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋”ํ•ด์„œ ๋‹ค์‹œ ์ถ”๊ฐ€

  • ์—ด๋ฆฐ ๊ด„ํ˜ธ + ์ˆซ์ž + ๋‹ซํžŒ ๊ด„ํ˜ธ : ์ˆซ์ž์™€ ์—ด๋ฆฐ/๋‹ซํžŒ ๊ด„ํ˜ธ์˜ ์ˆซ์ž๋ฅผ ๊ณฑํ•ด์ค€๋‹ค

# 44ms

bkt = input()
stack = ['']

def check():
    value = {']': 3, ')': 2}
    pair = {']': '[', ')': '('}
    for b in bkt:
        if b in ('(', '['):
            stack.append(b)
            continue

        if type(stack[-1]) != int and stack[-1] != pair[b]:
            return 0

        if type(stack[-1]) == int:
            if stack[-2] != pair[b]:
                return 0
            tmp = stack.pop() * value[b]
            stack.pop()
            stack.append(tmp)
        else:
            stack.pop()
            stack.append(value[b])
		
        # ์ˆซ์ž + ์ˆซ์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋‘ ๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๊บผ๋‚ด๊ณ  ๋”ํ•ด์„œ ๋‹ค์‹œ ์ถ”๊ฐ€ํ•ด์ฃผ๋Š” ๋ฐฉ์‹
        if len(stack) > 3 and type(stack[-1]) == type(stack[-2]) == int:
            tmp = stack.pop() + stack.pop()
            stack.append(tmp)


    if len(stack) > 2 and type(stack[-1]) == type(stack[-2]) == int:
        tmp = stack.pop() + stack.pop()
        stack.append(tmp)

    if len(stack) > 2 or type(stack[-1]) != int:
        return 0
    else:
        return stack[-1]

print(check())

ํ’€๋ฆฌ๊ธด ํ–ˆ์ง€๋งŒ ์–ด๋ฉ”์ด์ง•ํ•œ ํŒŒ์ด์ฌ์ด๋ผ์„œ ํ’€๋ฆฐ ๋ฌธ์ œ. ์Šคํƒ์— ๊ด„ํ˜ธ(๋ฌธ์ž์—ด)์™€ ์ˆซ์ž๊ฐ€ ๊ฐ™์ด ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ์–ธ์–ด๋กœ๋Š” ์‹œ๋„ํ•  ์ˆ˜ ์—†๋Š” ๋ฐฉ์‹์ด์—ˆ๋‹ค.

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

๊ด„ํ˜ธ๋Š” ์Šคํƒ์œผ๋กœ, ์ˆซ์ž๋Š” ๋ณ€์ˆ˜๋กœ

์ด ๋ธ”๋กœ๊ทธ์˜ ์ฝ”๋“œ ์ฐธ์กฐ

์ผ๋‹จ ์—ด๋ฆฐ ๊ด„ํ˜ธ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ๋ฌด์กฐ๊ฑด ์ˆซ์ž๋ฅผ ๊ณฑํ•˜๊ณ , ๋‹ซํžŒ ๊ด„ํ˜ธ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ๋ฐ”๋กœ ์ง์ „์˜ ๊ด„ํ˜ธ๊ฐ€ ์—ด๋ฆฐ ๊ด„ํ˜ธ์ธ ๊ฒฝ์šฐ์—๋งŒ ๋ˆ„์ ๋œ ๊ฐ’์„ ๋”ํ•ด์ค€๋‹ค. ๋ˆ„์ ๋œ ๊ฐ’์„ ์›๋ž˜๋Œ€๋กœ ๋˜๋Œ๋ ค์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด์กฐ๊ฑด ๊ณฑํ–ˆ๋˜ ์ˆซ์ž๋กœ ๋‚˜๋ˆ ์ค€๋‹ค

bracket = list(input())

stack = []
answer = 0
tmp = 1

for i in range(len(bracket)):

    if bracket[i] == "(":
        stack.append(bracket[i])
        tmp *= 2

    elif bracket[i] == "[":
        stack.append(bracket[i])
        tmp *= 3

    elif bracket[i] == ")":
        if not stack or stack[-1] == "[":
            answer = 0
            break
        if bracket[i-1] == "(":
            answer += tmp
        stack.pop()
        tmp //= 2

    else:
        if not stack or stack[-1] == "(":
            answer = 0
            break
        if bracket[i-1] == "[":
            answer += tmp

        stack.pop()
        tmp //= 3

if stack:
    print(0)
else:
    print(answer)

์žฌ๊ท€๋ฅผ ์ด์šฉํ•œ ํ’€์ด

์—ด๋ฆฐ ๊ด„ํ˜ธ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ์žฌ๊ท€๋ฅผ ํ†ตํ•ด ๋‚ด๋ถ€์˜ ๊ด„ํ˜ธ๋“ค์„ ํƒ์ƒ‰ํ•ด ๊ฐ’์„ return ํ•œ๋‹ค. return ๋œ ๊ฐ’์— ์ˆซ์ž๋ฅผ ๊ณฑํ•ด์ฃผ๋Š” ๋ฐฉ์‹. ๊ด„ํ˜ธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š๊ฑฐ๋‚˜ ํ•œ๋‹ค๋ฉด sys.exit()๋ฅผ ํ†ตํ•ด ans์˜ ๊ฐ’์— ์ƒ๊ด€์—†์ด 0์ด ์ถœ๋ ฅ๋˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ•์ œ ์ข…๋ฃŒ๋œ๋‹ค.

์ž…๋ ฅ๋ฐ›์€ ๋ฌธ์ž์—ด์„ ๊ฑฐ๊พธ๋กœ ๋’ค์ง‘์–ด์„œ ์•ž์— ์žˆ๋Š” ๊ฐ’๋ถ€ํ„ฐ pop()ํ•ด์„œ ๊บผ๋ƒˆ๋‹ค. ์ด๋Ÿฌ๋ฉด ์ธ๋ฑ์Šค์˜ ๊ฐ’๋“ค์ด ๋ฐ”๋€” ํ•„์š”๊ฐ€ ์—†์–ด์„œ ๋” ๋น ๋ฅธ๊ฐ€?

์ฐธ๊ณ ํ•œ ๋ธ”๋กœ๊ทธ

import sys
input = sys.stdin.readline

s = list(input().rstrip())[::-1]

def cal(start):
    r = 0
    while s:
        a = s.pop()
        if a == "(" or a == "[":
            r += cal(a)
        elif start == "(" and a == ")":
            return 2 * max(1,r)
        elif start == "[" and a == "]":
            return 3 * max(1,r)
    
    # ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋น„์—ˆ๋Š”๋ฐ ์ตœ์ข… return ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค๋Š” ๊ฒƒ์€ ๊ด„ํ˜ธ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ์„ ์˜๋ฏธ
    print(0)
    sys.exit()

ans = 0    
while s:
    ans += cal(s.pop())
print(ans)

ํ›„๊ธฐ

์Šคํƒ... ๊ด„ํ˜ธ...

profile
์•„๋ฌด๋ง์ด๋‚˜ํ•˜๊ธฐ

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