1. 문제
2. 문제 해석
- 어렵다.
- 핵심은 열린 괄호가 들어올때 문제에 주어진 대로 곱하기를 해주고, 닫힌 괄호가 맞는 모양이면 pop과 동시에 이전것과 비교해 더하기를 해주어야 한다.
3. enumerate함수
1) 이 코드를 살려준 함수이다.
2) 리스트에 대해서 index값과 element를 함께 가져와 준다.
3) 잘 사용하면 반복문을 줄일 수 있을 것 같다.
4. 코드
import sys
input = sys.stdin.readline
# stack에 넣는다.
stack = []
# 점수를 계산하는 sum 1로 시작
# 뒤에 열린 괄호가 들어오면서 곱샘을 해주기 때문에
sum = 1
# 괄호가 닫힐때 기존 괄호를 pop하면서 sum을 더해 주기 위한 변수
tmp = 0
# 괄호 데이터를 하나씩 받는다
st=input()
# 문자열의 인덱스 값과 요소를 함께 가져온다.
for i,v in enumerate(st):
if v == '(': # 반복문으로 가져온 요소가 열린 괄호일때
if not stack: # stack에 아무것도 없다면
stack.append(v) # 가져온 요소를 stack에 더한다.
sum *= 2 # sum에 2를 곱한다.
elif stack[-1] == '(': # 비어있지 않아도 동일
stack.append(v)
sum *= 2
elif stack[-1] == '[': # 열린 괄호가 있다면 동일
stack.append(v)
sum *= 2
elif v == '[': # 위 '(' 와 동일
if not stack:
stack.append(v)
sum *= 3
elif stack[-1] == '(':
stack.append(v)
sum *= 3
elif stack[-1] == '[':
stack.append(v)
sum *= 3
elif v == ')': # 모양이 맞지 않는 괄호면 tmp를 0으로 만들고 break
if len(stack) == 0 or stack[-1] == '[':
tmp = 0
break
elif st[i-1] == '(': # 이전 인덱스의 요소와 모양이 맞다면
tmp += sum
stack.pop()
sum //= 2
elif v == ']':
if len(stack) == 0 or stack[-1] == '(':
tmp = 0
break
elif st[i-1] == '[': # 이전 인덱스의 요소와 모양이 맞다면
tmp += sum
stack.pop()
sum //= 3
if stack:
print(0)
else:
print(tmp)
반응형
'Develop > Algorithm' 카테고리의 다른 글
[문제풀이]백준_16564_히오스 프로게이머(이분탐색) (0) | 2022.10.05 |
---|---|
[큐]queue 정리_1(백준_11866_요세푸스 문제 0) (0) | 2022.10.04 |
[스택]Stack 정리_1(with. 백준,9012, 괄호) (0) | 2022.10.02 |
[탐색알고리즘]이분탐색 (0) | 2022.10.01 |
[문제풀이]백준 2805 나무자르기 (0) | 2022.10.01 |