반응형
https://www.acmicpc.net/problem/2504
2504번: 괄호의 값
4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일
www.acmicpc.net
내가 한 풀이
inputs=list(str(input()))
stack=[]
total=0
for i in range (len(inputs)):
now=inputs[i]
if now==')':
tmp=0
if len(stack)==0:
print(0)
exit(0)
while stack:
x=stack.pop()
if x=='(':
if tmp==0:
stack.append(2)
else:
stack.append(2*tmp)
break
elif x=='[':
print("0")
exit (0)
else:
tmp=tmp+int(x)
elif now==']':
tmp=0
if len(stack)==0:
print(0)
exit(0)
while stack:
x=stack.pop()
if x=='[':
if tmp==0:
stack.append(3)
else:
stack.append(3*tmp)
break
elif x=='(':
print("0")
exit(0)
else:
tmp=tmp+int(x)
else:
stack.append(inputs[i])
for i in stack:
if i=='(' or i=='[':
print("0")
exit(0)
else:
total+=i
print(total)
입력값 리스트를 for문을 돌려
case 1. 현재 값이 ) 인경우
stack의 마지막 값이 ( 일 때까지 pop을 해준다. 이 때 tmp 변수를 사용하여 () 사이 다른 연산값을 더 한 뒤 맞는 괄호가 나왔을때 tmp값과 2를 곱해 stack에 넣어준다.
case 2. 현재 값이 ] 인경우
stack의 마지막 값이 [ 일 때까지 pop을 해준다. 이 때 tmp 변수를 사용하여 [] 사이 다른 연산값을 더 한 뒤 맞는 괄호가 나왔을때 tmp값과 3를 곱해 stack에 넣어준다.
ex)
inputs=['(','(,')',')]
현재 i=2
stack=['(','(']
now=')'
tmp=0 이기 때문에 ()연산에 맞는 2를 stack에 append
stack=['(',2]
현재 i=3
stack=['(',2]
now=')'
stack의 마지막 값이 괄호가 아닌 숫자이기 때문에 tmp에 2를 더해준다.
tmp=2
stack=['(']
tmp=2이기 때문에 2* 2( ()연산 값)=4을 stack에 append
stack=[2*2]
'코테 공부' 카테고리의 다른 글
백준[14719] 빗물 (파이썬 풀이 (0) | 2021.10.06 |
---|---|
백준[2588] 곱셈 (파이썬 풀이) (0) | 2021.10.06 |
백준[14888] 연산자 끼워넣기 (파이썬 풀이) (0) | 2021.10.05 |
백준[1874] 스택 수열 (파이썬 풀이) (0) | 2021.10.04 |
백준[1181] 단어정렬 (파이썬 풀이) (0) | 2021.10.03 |