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)