1 걸린 시간 : 40m
2 사용한 자료구조 및 개념 : stack
💡문제풀이 아이디어 및 어려웠던 점
💫 아이디어
1️⃣ temp로 괄호의 깊이를 계산한다.
2️⃣ 닫힌 괄호가 나오면 현재까지 계산한 temp값을 answer에 더해주고 짝을 이루는 여는 괄호를 스택에서 제거한다
3️⃣ 닫는 괄호가 나오면서 깊이가 줄었으니 해당 괄호 값 만큼 temp를 나눠준다.
(()[[]]) 의 경우
( temp에 해당 괄호의 값인 2를 곱해준다.
( 여는 괄호가 나온다는 것은 깊이가 깊어졌다는 뜻이다. (깊이가 깊어졌다 → 괄호가 중첩되었다!)
따라서 temp에 2를 또 곱해준다.
) 닫는 괄호가 나왔다. 닫는 괄호는 깊이가 하나 줄었다는것! 중복 괄호가 하나 사라진다는 뜻이다.
그래서 현재 temp값을 answer에 더해주고 temp를 2로 나눠주는 것!
그러면 temp는 4 → 2가 되고 이후에 나오는 [ 는 여전히 양 끝 ( ) 에 중첩되어 있으니 temp 2에서 3을 곱해주면 되는 것이다!
Solution Code & 주석
brackets = input()
stack = []
temp = 1
answer = 0
for i in range(len(brackets)):
if brackets[i] == '(':
stack.append(brackets[i])
temp *= 2
elif brackets[i] == '[':
stack.append(brackets[i])
temp *= 3
elif brackets[i] == ')':
if not stack or stack[-1] == '[':
answer = 0
break
if brackets[i - 1] == '(':
answer += temp
stack.pop()
temp //= 2
elif brackets[i] == ']':
if not stack or stack[-1] == '(':
answer = 0
break
if brackets[i - 1] == '[':
answer += temp
stack.pop()
temp //= 3
if stack or answer == 0:
print(0)
else:
print(answer)
'💡Algorithm > python' 카테고리의 다른 글
[python]2493_탑 (2) | 2023.07.13 |
---|---|
[python]2800_괄호 제거 (0) | 2023.07.12 |
[python]10799_쇠막대기 (0) | 2023.07.10 |
[python]1874_스택 수열 (0) | 2023.07.06 |
[python]2346_풍선 터뜨리기 (0) | 2023.07.05 |