BOJ 2504번 괄호의 값 Python 문제 풀이
분류: Data Structure (자료구조)
https://www.acmicpc.net/problem/2504
from sys import stdin
def cal(line: str) -> int:
table = {'(': ')', '[': ']'}
value = {'(': 2, '[': 3}
stack = []
res = 0
temp = 1
for i, bracket in enumerate(line):
if bracket in '([':
stack.append(bracket)
temp *= value[bracket]
else:
if not stack or bracket != table[stack[-1]]:
return 0
if i > 0 and line[i - 1] == stack[-1]:
res += temp
temp //= value[stack.pop()]
return res if not stack else 0
def main():
line = stdin.readline().strip()
print(cal(line))
if __name__ == "__main__":
main()
스택을 이용한 풀이이다. 여는 괄호가 나오면 스택에 넣고, 닫는 괄호가 나오면 연산한다.temp
에는 값들을 곱하고, res
에는 temp
값을 더해가며 결과를 구한다.
from sys import stdin
def cal(line: str) -> int:
table = {'(': ')', '[': ']'}
value = {'(': 2, '[': 3}
stack = []
res = 0
for i, bracket in enumerate(line):
if bracket in '([':
stack.append(bracket)
else:
if not stack:
return 0
temp = 0
while stack:
top = stack.pop()
if top.isdigit():
temp += int(top)
elif bracket == table[top]:
if temp == 0:
stack.append(str(value[top]))
else:
stack.append(str(temp * value[top]))
break
else:
return 0
for i in stack:
if i in '([':
return 0
else:
res += int(i)
return res
def main():
line = stdin.readline().strip()
print(cal(line))
if __name__ == "__main__":
main()
Stack을 이용한 다른 풀이이다. 마찬가지로 여는 괄호는 스택에 넣고, 닫는 괄호가 나오면 연산한다. 이전 풀이와 달리 연산 결과도 스택에 넣으며 결과를 구한다.