코딩하는 Fug

2504 괄호의 값 본문

백준풀이-python

2504 괄호의 값

Fug 2021. 7. 20. 11:13

https://www.acmicpc.net/problem/2504

#스택

 

2504번: 괄호의 값

4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다.  만일

www.acmicpc.net

#2504 괄호의 값 정리

def foranswer(l):

#생각을 좀 했는데 스택을 사용하여서 이 스택에 남는게 0이 아니면 올바르지않다고 하고 만들면 편할것 같았다 고로

#함수 이용

 

stack=[]
#스택사용


for i in range(len(l)):
if l[i]=='(' or l[i]=='[':

stack.append(l[i])

#(와 [가 들어오면 stack에 그냥 넣는다

 

elif l[i]==')':

a=0

while stack:

item=stack.pop()

if item=='(':

stack.append(2 if a==0 else a*2)

break

elif item=='[':

return 0

else:

a+=item

 

elif l[i]==']':

a=0

while stack:

item=stack.pop()

if item=='[':

stack.append(3 if a==0 else a*3)

break

elif item=='(':

return 0

else:

a+=item

#아래와 위는 같다 이 부분이 생각하기 좀 어려운 부분인데 우선 생각해야될 점은 처음인덱스부터 끝인덱스까지 차례대

 

로 간다는 것. 고로 괄호는 앞으로 가면서 닫히면서 간다 뒤를 돌아봤을때 ]나 )는 없어야 올바른 문장인 것 고로 l[i]

 

==")"인 경우로 따지면 신경 써야할 것은 ]가 있는가?( ")"는 무조건 없다) 그리고 "("이 나오기 전까지 어떤 숫자들이 있

 

는가 그리고 "("이 나오면 바로 닫혔는가 아니면 중간에 숫자가 있었는가 이정도를 생각해봐야 하는 것이다.

 

return stack

#올바른 문장이여서 return 0 당하지 않았다면 stack을 꺼내자

 

l=list(input())

#문장 입력

stack=foranswer(l)

#stack 가져오기

if stack==0:

stack=[]

#stack이 return 0 당했으면 stack==[]으로 만들자

print(0 if '(' in stack or '[' in stack else sum(stack))

#stack이 비어있지 않으면 0으로

 

#풀기 힘들었는데 초등부 중등부 문제란다 올림피아드긴해도 현타가 좀 온다랄까 생각하는 거 자체는 괜찮은데 컴퓨터

 

로 구현하는게 힘든 문제이고 함정이 좀 많은 문제였던거 같다. 특히 스택을 활용해야 하는 문제이니 만큼 스택에 어떤

 

허점이 있는지 생각하는게 어려웠다.

'백준풀이-python' 카테고리의 다른 글

1062 가르침  (0) 2021.07.22
14719 빗물  (0) 2021.07.22
1916 최소비용 구하기  (0) 2021.07.19
14888 연산자 끼워넣기  (0) 2021.07.15
2581 소수  (0) 2021.07.14