2504번: 괄호의 값
4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일
www.acmicpc.net
🔍 문제 분석
괄호가 올바르다면, 조건에 맞게 괄호에 값을 할당하여 계산하는 문제
❗ 해결 아이디어
처음에는 괄호가 올바른지 검사하는 단계와 값을 계산하는 단계를 한번에 진행했었는데, 예외 처리 코드가 복잡해져서 과정을 직관적으로 따라가기 어려웠다.
따라서 괄호가 올바른지 검사하는 단계를 분리하여 과정을 단순화하였다. 이전 괄호의 프로세스를 따와서, 괄호가 올바른 경우에만 점수 계산 단계로 넘어가니 한결 수월하게 이해가 가능했다.
✔️ 최종 풀이
import sys
bracket_input = sys.stdin.readline().rstrip()
stack = []
is_ok = True
# 괄호 쌍이 맞는지 확인
for _ in range(len(bracket_input)):
ps_list = []
for bracket in bracket_input:
ps_list.append(bracket)
if ps_list[-2:] == ['(', ')'] or ps_list[-2:] == ['[', ']']:
del ps_list[-2:]
if ps_list:
is_ok = False
if is_ok:
for bracket in bracket_input:
if bracket == '(':
stack.append(bracket)
elif bracket == '[':
stack.append(bracket)
elif bracket == ')':
if stack[-1] == '(':
stack.pop()
stack.append(2)
elif type(stack[-1]) == int:
temp = 0
while type(stack[-1]) == int:
temp += stack[-1]
stack.pop()
stack.pop()
stack.append(temp*2)
elif bracket == ']':
if stack[-1] == '[':
stack.pop()
stack.append(3)
elif type(stack[-1]) == int:
temp = 0
while type(stack[-1]) == int:
temp += stack[-1]
stack.pop()
stack.pop()
stack.append(temp*3)
if is_ok:
print(sum(stack))
else:
print(0)
'Problem Solving' 카테고리의 다른 글
[백준 BOJ - 2493 / 파이썬] 탑 (0) | 2022.08.28 |
---|---|
[백준 BOJ - 1620 / 파이썬] 나는야 포켓몬 마스터 이다솜 (0) | 2022.08.04 |
[백준 BOJ - 2346 / 파이썬] 풍선 터뜨리기 (0) | 2022.07.30 |
[백준 BOJ - 1966 / 파이썬] 프린터 큐 (0) | 2022.07.30 |
[백준 BOJ - 10799 / 파이썬] 쇠막대기 (0) | 2022.07.27 |
댓글