Algorithm & Data Structure
[백준] 괄호의 값(2504번) - Python
후뿡이
2023. 3. 3. 20:33
✅문제 - 괄호의 값(2504번)
✅사용 개념 및 알고리즘
◼ 자료구조 : 위의 문제는 괄호를 닫아줄 때 가장 마지막에 넣은 값과 현재 괄호를 비교해야하기 때문에 Stack 자료구조를 사용해야한다.
◼ 알고리즘
1) 값을 임시로 저장할 변수 tmp를 1로 설정한다.
2) [ or ( 을 만나면 tmp에 2 또는 3을 곱해준다.
3) 괄호를 닫을 때 적합성 판단을 한다. 만약 스택이 비어있거나 stack[-1]과 현재 괄호가 매칭되지 않으면 answer = 0 으로 만들고 break 한다.
4) 앞의 괄호가 여는 괄호일 경우 answer 에 현재 tmp를 더해준다.
5) 괄호를 닫았으므로 tmp 값을 2 or 3으로 나누어준다.
❓ 위의 4) 과정에서 왜 앞에 여는 기호가 있을 때만 값을 더해줄까?!
만약 앞에 기호가 닫는 기호일 경우 우리가 여는 기호를 사용했을 때 tmp에 곱해준 2 or 3을 지워주는 역할만 하기 때문이다!
✅코드
import sys
sentence = sys.stdin.readline().rstrip()
stack = []
tmp = 1
answer = 0
for i in range(len(sentence)):
if sentence[i] == '(':
stack.append(sentence[i])
tmp *= 2
elif sentence[i] == '[':
stack.append(sentence[i])
tmp *= 3
elif sentence[i] == ')':
if not stack or stack[-1] != '(':
answer = 0
break
if sentence[i-1] == '(': answer += tmp
tmp //= 2
stack.pop()
elif sentence[i] == ']':
if not stack or stack[-1] != '[':
answer = 0
break
if sentence[i-1] == '[': answer += tmp
tmp //= 3
stack.pop()
if stack: answer = 0
print(answer)