ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
์ฌ๋ฐ๋ฅธ ๊ดํธ์ธ์ง ํ๋จํ๋ฉด์, `()`์ธ ๊ฒฝ์ฐ์๋ 2๋ก ์นํํ๊ณ `[]`์ธ ๊ฒฝ์ฐ์๋ 3์ผ๋ก ์นํํ์ฌ ๊ณ์ฐํ๋ ๊ณผ์ ์ด ํ์ํ๋ค. ๋ํ ์นํ๋ ๊ฐ์ด `()` ๋๋ `[]` ์ฌ์ด์ ์๋ค๋ฉด 2๋ 3์ด ๊ณฑํด์ง๊ฒ ๋๋ค. ์ฒ์์๋ ํด๋น ๊ณผ์ ์ ํ๋๋ก ์ฒ๋ฆฌํ๋ ค๊ณ ํ๋๋ฐ, ์ฝ๋ ์ฝ๊ธฐ๊ฐ ํ๋ค์ด ๋ฐ๋ก ํ๋จํ๋ ๊ฒ์ด ์ข๋ค๊ณ ์๊ฐํ๋ค.
- ์
๋ ฅ์ผ๋ก ์ฃผ์ด์ง ๊ดํธ๋ค์ด ์ฌ๋ฐ๋ฅธ ๊ดํธ์ธ์ง ํ๋จํ๋ค.
- ์ฌ๋ฐ๋ฅธ ๊ดํธ๋ ํ๋ก๊ทธ๋๋จธ์ค: ์ฌ๋ฐ๋ฅธ ๊ดํธ์ ๊ฐ์ด ์์ฑํ๋ฉด ํ๋จํ ์ ์๋ค.
- ๊ฐ ๊ดํธ๋ค์ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
- stack์ `()`์ `[]`๊ฐ ๋ง๋ ๊ฒฝ์ฐ ๋ณํ๋๋ ์ซ์๋ฅผ ๋ฐ์ํ๋ค.
- ์ซ์์ ๊ดํธ๊ฐ ๋ง๋๋ ์ํฉ์ ๊ณ ๋ คํ์ฌ, sub total์ ํตํด ๊ฐ์ ๋ฐ์ํ์ฌ stack์ ๋ฃ๋๋ค.
- ๋ชจ๋ ์ ๋ ฅ ๊ฐ์ ๋ํ ์ฒ๋ฆฌ๊ฐ ๋๋ ํ, ํฉ์ ๊ณ์ฐํ๋ค.
- ๋์ ๋๋ฆฌ๋ฅผ ํ์ฉํ์ฌ, ๊ฐ๋ ์ฑ์ ๋์ด๊ณ ์ ํ๋๋ฐ ๋์์ง์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค.
์ฝ๋
from sys import stdin
case = {
'(': ')',
'[': ']'
}
def possible() -> bool:
stack = []
for bracket in string:
if bracket in case.keys():
stack.append(bracket)
elif bracket in case.values():
if stack and bracket == case[stack[-1]]:
stack.pop()
else:
return False
return True if not stack else False
def change_bracket(value) -> None:
cur_stack, cur_bracket = value
sub_total = 0
num = 2 if cur_bracket == ')' else 3
while cur_stack:
top = cur_stack.pop()
if type(top) == str and cur_bracket == case[top]:
cur_num = num if not sub_total else num * sub_total
cur_stack.append(cur_num)
break
sub_total += top
def calculate() -> int:
stack = []
for bracket in string:
if bracket in case.keys():
stack.append(bracket)
elif stack and bracket in case.values():
change_bracket([stack, bracket])
return sum(stack)
if __name__ == '__main__':
string = stdin.readline().strip()
print(calculate() if possible() else 0)
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 16953 A โ B (0) | 2021.03.15 |
---|---|
๋ฐฑ์ค: 2800 ๊ดํธ ์ ๊ฑฐ (0) | 2021.03.12 |
๋ฐฑ์ค: 2346 ํ์ ํฐ๋จ๋ฆฌ๊ธฐ (0) | 2021.03.10 |
๋ฐฑ์ค: 2493 ํ (0) | 2021.03.10 |
๋ฐฑ์ค: 1966 ํ๋ฆฐํฐ (0) | 2021.03.09 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ