728x90
300x250
bracket = list(input())
ans = 0
tmp =1
stack = []
for i in range(len(bracket)):
if bracket[i] == '(':
stack.append(bracket[i])
tmp*=2
elif bracket[i] == '[':
stack.append(bracket[i])
tmp*=3
elif bracket[i] == ')':
if not stack or stack[-1]!='(':
ans =0
break
if bracket[i-1] =='(' :
ans+=tmp
stack.pop()
tmp//=2
else:
if not stack or stack[-1]!='[':
ans =0
break
if bracket[i-1] =='[' :
ans+=tmp
stack.pop()
tmp//=3
if stack:
print(0)
else:
print(ans)
1.bracket 에 입력받을 괄호 값들을 list로 저장(bracket이 괄호라는 뜻)
2.ans는 계산된 결과값
3.tmp = (일때 2, [일 때 3을 곱하기 위햇 초기값 1
4.stack에는 '(','[' 일때만 저장하기 위한 list
5.괄호의 수만큼 for문
6.만약 '(' 일 경우에는 stack에 저장하고 결과값에 x2
7.만약'[' 일 경우에는 stack에 저장하고 결과값에 x3
8.만약 ')' 일 경우 이면서, stack에 저장된 괄호가 없거나, 마지막이 '('아닐 경우에는 0을 출력하고 빠져나옴
i-1번쨰가 '(' 일 경우 결과값에 tmp를 더해주고 다시 tmp를 2로 나눠줌으로써 초기화
9. 만약 ']' 일 경우 이면서, stack에 저장된 괄호가 없거나, 마지막이 '['아닐 경우에는 0을 출력하고 빠져나옴
i-1번쨰가 '[' 일 경우 결과값에 tmp를 더해주고 다시 tmp를 3로 나눠줌으로써 초기화
10.stack에 남는게 있으면 짝이 안맞기 떄문에 0 리턴
11.그게 아니라면 ans출력
728x90
'내맘대로IT > Python' 카테고리의 다른 글
백준 파이썬 1700 멀티탭 스케줄링 (0) | 2023.12.12 |
---|---|
백준 14719 빗물 (1) | 2023.12.06 |
백준 파이썬 14888 연산자끼워넣기 (0) | 2023.11.29 |
백준 파이썬1978 소수찾기 (0) | 2023.11.28 |
백준 파이썬 2581 소수 (1) | 2023.11.27 |