๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/๋ฐฑ์ค€(BOJ)

[ ํŒŒ์ด์ฌ(python) ] ๋ฐฑ์ค€ 2504 - ๊ด„ํ˜ธ์˜ ๊ฐ’

by YWTechIT 2021. 7. 7.
728x90

๐Ÿ“ ๋ฐฑ์ค€ 2504 - ๊ด„ํ˜ธ์˜ ๊ฐ’

๋ฌธ์ œ: ๋ฐฑ์ค€ 2504 - ๊ด„ํ˜ธ์˜ ๊ฐ’


๐Ÿ’ก ๋‚˜์˜ ํ’€์ด

stack์— ๊ฐ’์„ ๋„ฃ๊ณ  ์ˆœ์„œ๋ฅผ ์ž˜ ์•Œ์•˜๋”๋ผ๋ฉด ๊ธˆ๋ฐฉ ํ’€ ์ˆ˜ ์žˆ์„ ํ…๋ฐ, ๋‚˜ํ•œํ…Œ๋Š” ์–ด๋ ค์› ๋˜ ๋ฌธ์ œ์˜€๋‹ค. ์ „์ฒด์ ์ธ ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ๊ด„ํ˜ธ์—ด์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค.(def is_checked)
  2. ๊ด„ํ˜ธ์—ด์ด ์˜ฌ๋ฐ”๋ฅด๋ฉด def calc_value ํ•จ์ˆ˜๋กœ ์ด๋™ํ•˜๊ณ  ๊ด„ํ˜ธ์—ด์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š๋‹ค๋ฉด print(0)์„ ์ถœ๋ ฅํ•œ๋‹ค.

์ด์–ด์„œ ์„ธ๋ถ€์ ์ธ ํ๋ฆ„์„ ์‚ดํŽด๋ณด์ž. is_check()๋Š” ๋‹จ์ˆœํžˆ ์˜ฌ๋ฐ”๋ฅธ์ง€ ์•„๋‹Œ์ง€๋งŒ ํ™•์ธํ•˜๋ฉด ๋˜๊ธฐ๋•Œ๋ฌธ์— ํฐ ์–ด๋ ค์›€์€ ์—†์—ˆ์œผ๋‚˜, calc_value() ํ•จ์ˆ˜์—์„œ ์ƒ๋‹นํžˆ ์• ๋ฅผ ๋จน์—ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€ ์ฐจ๊ทผ์ฐจ๊ทผ ์‚ดํŽด๋ณด์ž.

  1. ์—ฌ๋Š” ๊ด„ํ˜ธ((, [)๋ฉด stack์— ์ง‘์–ด๋„ฃ๋Š”๋‹ค.
  2. ๋‹ซ๋Š” ๊ด„ํ˜ธ๊ฐ€ ๋‚˜์˜ฌ๋•Œ )์˜ ๊ฒฝ์šฐ์™€ ]์˜ ๊ฒฝ์šฐ๋ฅผ ๋‚˜๋ˆˆ๋‹ค.
  3. )์ผ๋•Œ stack[-1]์ด (๋ฉด ()๊ฐ€ ๋˜๋ฏ€๋กœ ๊ด„ํ˜ธ์—ด์˜ ๊ฐ’์€ 2์ด๋‹ค. ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ์ ์€ stack[-1]๊ฐ’์„ 2๋กœ ๋ฐ”๊ฟ”์ฃผ์ž. ๋งŒ์•ฝ, (๊ฐ€ ์•„๋‹ˆ๋ฉด ํ•ด๋‹น ๊ฐ’์€ ์ˆซ์ž๊ธฐ ๋•Œ๋ฌธ์—(์ˆซ์ž์ธ ์ด์œ ๋Š” ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด๋ผ๋Š” ์ „์ œ์กฐ๊ฑด์ด ๋ถ™์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ ๋งŒ์•ฝ, [๊ฐ€ ์˜ฌ ์ˆ˜๋„ ์žˆ์ง€์•Š๋‚˜? ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด์•„๋‹ˆ๊ณ  ์ด๋ฏธ def is_checked์—์„œ ๊ฑธ๋Ÿฌ์กŒ์„ ๊ฒƒ์ด๋‹ค.)
  4. 5๋ฒˆ ๊ทœ์น™์— ์˜ํ•ด ์ˆซ์ž๋ฅผ ๊ณ„์† ๋”ํ•ด์ค€๋‹ค.(์—ฌ๊ธฐ์„œ ์–ธ์ œ๊นŒ์ง€ ๋”ํ•ด์ฃผ๋Š”์ง€๊ฐ€ ์ค‘์š”ํ•œ๋ฐ, ์—ฌ๋Š” ๊ด„ํ˜ธ()๊ฐ€ ๋‚˜์˜ฌ๋•Œ๊นŒ์ง€ ๋”ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.) ๊ณ„์† ๋”ํ•ด์ฃผ๋‹ค๊ฐ€ ์—ฌ๋Š” ๊ด„ํ˜ธ(()๋ฅผ ๋งŒ๋‚˜๊ฒŒ ๋˜๋ฉด 3๋ฒˆ ๊ทœ์น™(‘(X)’ ์˜ ๊ด„ํ˜ธ๊ฐ’์€ 2×๊ฐ’(X) ์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค.)์— ์˜ํ•ด ํ˜„์žฌ๊นŒ์ง€ ๋ˆ„์ ๋œ ์ ์ˆ˜์— 2๋ฅผ ๊ณฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
  5. ]์ผ๋•Œ๋„ 3๋ฒˆ๊ณผ์ •๊ณผ ๋™์ผํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.(๊ด„ํ˜ธ์™€ ์ ์ˆ˜๋งŒ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ๋œ๋‹ค.)

 

728x90
s = input()

def is_check(s):    # ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ธ์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜
    stack = []
    flag = True

    for i in range(len(s)):
        if s[i] == '(' or s[i] == '[':
            stack.append(s[i])

        else:    # ) ]
            if s[i] == ')':
                if stack and stack[-1] == '(':
                    stack.pop()
                else:
                    flag = False

            else:    # ]
                if stack and stack[-1] == '[':
                    stack.pop()
                else:
                    flag = False

    if not stack and flag:
        return True
    return False

def calc_value(s):    # ๊ด„ํ˜ธ์˜ ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜
    stack = []
    for i in range(len(s)):
        if s[i] == '(' or s[i] == '[':
            stack.append(s[i])

        else:    # ) ]
            if s[i] == ')':
                if stack[-1] == '(':
                    stack[-1] = 2
                else:    # ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ˆซ์ž๋งŒ ์žˆ๋‹ค.
                    temp = 0
                    for idx in range(len(stack)-1, -1, -1):    # ๊ด„ํ˜ธ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€ ๊ณ„์† ๋”ํ•ด์ฃผ๊ธฐ (XY) = X + Y
                        if stack[idx] == '(':    
                            stack[-1] = temp * 2
                            break
                        else:    # ==> type(stack[idx]) == int
                            temp += stack[-1]
                            stack.pop()

            else:    # ]
                if stack[-1] == '[':
                    stack[-1] = 3
                else:    # ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์—ด์ด๊ธฐ ๋•Œ๋ฌธ์— ์ˆซ์ž๋งŒ ์žˆ๋‹ค.
                    temp = 0
                    for idx in range(len(stack)-1, -1, -1):    # ๊ด„ํ˜ธ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€ ๊ณ„์† ๋”ํ•ด์ฃผ๊ธฐ (XY) = X + Y
                        if stack[idx] == '[':     
                            stack[-1] = temp * 3
                            break
                        else:    # ==> type(stack[idx]) == int
                            temp += stack[-1]
                            stack.pop()
    return sum(stack)

if is_check(s):
    print(calc_value(s))
else:
    print(0)
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€