728x90
๐ ๋ฐฑ์ค 2504 - ๊ดํธ์ ๊ฐ
๋ฌธ์ : ๋ฐฑ์ค 2504 - ๊ดํธ์ ๊ฐ
๐ก ๋์ ํ์ด
stack
์ ๊ฐ์ ๋ฃ๊ณ ์์๋ฅผ ์ ์์๋๋ผ๋ฉด ๊ธ๋ฐฉ ํ ์ ์์ ํ
๋ฐ, ๋ํํ
๋ ์ด๋ ค์ ๋ ๋ฌธ์ ์๋ค. ์ ์ฒด์ ์ธ ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๊ดํธ์ด์ด ์ฌ๋ฐ๋ฅธ์ง ์ฌ๋ฐ๋ฅด์ง ์์์ง ๊ฒ์ฌํ๋ค.(
def is_checked
) - ๊ดํธ์ด์ด ์ฌ๋ฐ๋ฅด๋ฉด
def calc_value
ํจ์๋ก ์ด๋ํ๊ณ ๊ดํธ์ด์ด ์ฌ๋ฐ๋ฅด์ง ์๋ค๋ฉดprint(0)
์ ์ถ๋ ฅํ๋ค.
์ด์ด์ ์ธ๋ถ์ ์ธ ํ๋ฆ์ ์ดํด๋ณด์. is_check()
๋ ๋จ์ํ ์ฌ๋ฐ๋ฅธ์ง ์๋์ง๋ง ํ์ธํ๋ฉด ๋๊ธฐ๋๋ฌธ์ ํฐ ์ด๋ ค์์ ์์์ผ๋, calc_value()
ํจ์์์ ์๋นํ ์ ๋ฅผ ๋จน์๋ค. ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง ์ฐจ๊ทผ์ฐจ๊ทผ ์ดํด๋ณด์.
- ์ฌ๋ ๊ดํธ(
(
,[
)๋ฉดstack
์ ์ง์ด๋ฃ๋๋ค. - ๋ซ๋ ๊ดํธ๊ฐ ๋์ฌ๋
)
์ ๊ฒฝ์ฐ์]
์ ๊ฒฝ์ฐ๋ฅผ ๋๋๋ค. )
์ผ๋stack[-1]
์ด(
๋ฉด()
๊ฐ ๋๋ฏ๋ก ๊ดํธ์ด์ ๊ฐ์ 2์ด๋ค. ์ฌ๊ธฐ์ ์ค์ํ์ ์stack[-1]
๊ฐ์ 2๋ก ๋ฐ๊ฟ์ฃผ์. ๋ง์ฝ,(
๊ฐ ์๋๋ฉด ํด๋น ๊ฐ์ ์ซ์๊ธฐ ๋๋ฌธ์(์ซ์์ธ ์ด์ ๋ ์ฌ๋ฐ๋ฅธ ๊ดํธ์ด์ด๋ผ๋ ์ ์ ์กฐ๊ฑด์ด ๋ถ์ด์๊ธฐ ๋๋ฌธ์ธ๋ฐ ๋ง์ฝ,[
๊ฐ ์ฌ ์๋ ์์ง์๋? ํ ์ ์์ง๋ง ๊ทธ๋ ๊ฒ ๋๋ฉด ์ฌ๋ฐ๋ฅธ ๊ดํธ์ด์ด์๋๊ณ ์ด๋ฏธdef is_checked
์์ ๊ฑธ๋ฌ์ก์ ๊ฒ์ด๋ค.)5
๋ฒ ๊ท์น์ ์ํด ์ซ์๋ฅผ ๊ณ์ ๋ํด์ค๋ค.(์ฌ๊ธฐ์ ์ธ์ ๊น์ง ๋ํด์ฃผ๋์ง๊ฐ ์ค์ํ๋ฐ, ์ฌ๋ ๊ดํธ(
)๊ฐ ๋์ฌ๋๊น์ง ๋ํด์ฃผ๋ฉด ๋๋ค.) ๊ณ์ ๋ํด์ฃผ๋ค๊ฐ ์ฌ๋ ๊ดํธ((
)๋ฅผ ๋ง๋๊ฒ ๋๋ฉด3
๋ฒ ๊ท์น(‘(X)’ ์ ๊ดํธ๊ฐ์ 2×๊ฐ(X) ์ผ๋ก ๊ณ์ฐ๋๋ค.)์ ์ํด ํ์ฌ๊น์ง ๋์ ๋ ์ ์์ 2๋ฅผ ๊ณฑํด์ฃผ๋ฉด ๋๋ค.]
์ผ๋๋ 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)
๋ฐ์ํ
'Algorithm > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 20001 - ๊ณ ๋ฌด์ค๋ฆฌ ๋๋ฒ๊น (0) | 2021.07.12 |
---|---|
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 2493 - ํ (0) | 2021.07.09 |
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 3986 - ์ข์ ๋จ์ด (3) | 2021.07.06 |
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 4949 - ๊ท ํ์กํ ์ธ์ (0) | 2021.07.05 |
[ ํ์ด์ฌ(python) ] ๋ฐฑ์ค 10799 - ์ ๋ง๋๊ธฐ (0) | 2021.07.05 |
๋๊ธ