문제
🥈[실버2] 2504 - 괄호의 값
풀이
스택을 이용하면 괄호의 값 문제를 간단하게 구현할 수 있다.
알고리즘의 기본적인 아이디어는 다음과 같다 .
- 빈 스택을 하나 선언한다.
- '(' 혹은 '[' 가 들어오는 경우에는 스택에 push 한다.
- ')' 이 들어올 경우 '('이 나올 때 까지 pop을 한다.
- ']' 이 들어올 경우 '['이 나올 때 까지 pop을 한다.
- pop을 하면서 내부의 숫자를 연산한다.
코드
# 괄호의 값 [Silver 2]
import sys
bracket = str(sys.stdin.readline().strip())
bracket = list(bracket)
stack = []
while(len(bracket)>0):
a = bracket.pop(0)
if(a == '(' or a =='['):
stack.append(a)
if(a == ')'):
_sum = 0
while(True):
if not stack:
print(0)
sys.exit(0)
k = stack.pop()
if(k=='('):
break
if (str(type(k)) != "<class 'int'>"):
print(0)
sys.exit(0)
if(str(type(k)) == "<class 'int'>"):
_sum = _sum + k
if(_sum == 0):
stack.append(2)
elif(_sum != 0):
stack.append(_sum*2)
elif (a == ']'):
_sum = 0
while(True):
if not stack:
print(0)
sys.exit(0)
k = stack.pop()
if(k=='['):
break
if (str(type(k)) != "<class 'int'>"):
print(0)
sys.exit(0)
if(str(type(k)) == "<class 'int'>"):
_sum = _sum + k
if (_sum == 0):
stack.append(3)
elif (_sum != 0):
stack.append(_sum * 3)
sum_all = 0
while stack:
n = stack.pop()
if(str(type(n)) != "<class 'int'>"):
print(0)
sys.exit(0)
sum_all = sum_all+n
print(sum_all)
알고리즘 분류
- 구현
- 자료 구조
- 스택
- 재귀
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ] 숨바꼭질 3 (0) | 2022.01.10 |
---|---|
[BOJ] 숨바꼭질 2 (0) | 2022.01.06 |
[BOJ] 전쟁 - 전투 (0) | 2022.01.06 |
[BOJ] 빗물 (0) | 2022.01.03 |
[BOJ] 연산자 끼워 넣기 (0) | 2021.12.30 |