[Baekjoon] 2504 - 괄호의 값 (Python)
문제
’()’ 괄호열의 값은 2
’[]’ 괄호열의 값은 3
‘(x)’ 괄호값은 2 x 값(x)
‘[x]’ 괄호값은 3 x 값(x)
올바른 괄호열 X와 Y가 결합된 XY의 괄호값은 X + Y
문제는 빨리 이해했지만 보자마자 이해한 건 아니기 때문에 잠시 예시를 들어 간단 설명하자면
이런 식이다.
풀이
괄호를 입력받고, 괄호의 종류에 따라 케이스를 둘 것이다. ‘(‘ ‘)’ ‘[’ ‘]’
( or [ - 열린 괄호가 들어올 경우 2 or 3을 곱해주고 이후 올바른 괄호 판단 알고리즘대로 stack에 append 해줄 것이다.
) or ] - 닫힌 괄호가 들어올 경우 stack이 비어 있는지, stack[-1]이 올바른 괄호 짝이 맞는지 체크한다. 짝이 맞지 않을 경우 result = 0으로 초기화하고 break. 짝이 맞다면 2 or 3을 나눠주고 stack에서 pop 한다.
만약 닫힌 괄호가 들어오기 전에 짝이 맞는 열린 괄호가 들어 왔다면 그 두 괄호는 올바른 짝이고 가장 안 쪽에 있으므로 괄호의 한 케이스가 끝난 것이다. 그렇기 때문에 result에 값을 더해주면 된다.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import sys
input = sys.stdin.readline
list = input().strip()
stack = []
result = 0
n = 1
for i in range(len(list)):
if list[i] == "(":
n *= 2
stack.append(list[i])
elif list[i] == "[":
n *= 3
stack.append(list[i])
elif list[i] == ")":
if not stack or stack[-1] != "(":
result = 0
break
if list[i-1] == "(":
result += n
n //= 2
stack.pop()
elif list[i] == "]":
if not stack or stack[-1] != "[":
result = 0
break
if list[i-1] == "[":
result += n
stack.pop()
n //= 3
if stack:
print(0)
else:
print(result)
Leave a comment