Algorithm/Baekjoon

[백준] 2504 괄호의 값 python 풀이

jungeun919 2024. 6. 27. 10:48

문제

  • 난이도: 골드5
  • 알고리즘 분류: 구현, 자료구조, 스택
  • 요약: 괄호값을 정의한대로 계산하여 출력하기

 

풀이

case 분류

1. 열린 괄호
stack에 추가하기(append 연산)
temp 변수에 해당 괄호열의 값 곱하기

2. 닫힌 괄호

  • 스택이 비어있거나 스택의 top 값과 짝이 맞지 않을 경우 -> 올바르지 못한 괄호열
  • 짝이 맞고 직전에 짝이 맞는 열린 괄호일 경우 -> result 값 업데이트
    • bracket = '()[]' 일 경우 result += 2; result += 3
    • bracket = '[()]' 일 경우 [()에서 ()를 스택에서 제거 후 temp = 3*2; ]에서 result += 6
  • 짝이 맞을 경우 -> stack에서 제거하고(pop 연산) temp 값을 해당 괄호열의 값으로 나누기

모든 문자 확인 이후 스택에 값이 남아있으면 짝이 맞지 않은 경우 -> 올바르지 못한 괄호열

 

코드

bracket = list(input())

stack = []
res = 0
temp = 1

for i in range(len(bracket)):
	if bracket[i] == '(':
		stack.append('(')
		temp *= 2
		
	elif bracket[i] == '[':
		stack.append('[')
		temp *= 3
		
	elif bracket[i] == ')':
		if not stack or stack[-1] != '(':
			res = 0
			break
		elif bracket[i-1] == '(':
			res += temp
		stack.pop()
		temp //= 2
	
	elif bracket[i] == ']':
		if not stack or stack[-1] != '[':
			res = 0
			break
		elif bracket[i-1] == '[':
			res += temp
		stack.pop()
		temp //= 3

if stack:
	res = 0

print(res)