[백준] 2504번 괄호의 값(python)

마뇽미뇽·2025년 10월 17일

알고리즘 문제풀이

목록 보기
167/169

1. 문제

https://www.acmicpc.net/problem/2504

2. 풀이

( 또는 [ 일때 스택에 담아 놓으며 중첩횟수에 따라 temp에 값을 곱해놓으며 이후 무조건 "( )" 와 "[ ]" 의 짝이 맞는다면 pop 하며 값을 저장한다. 이후 1개의 괄호를 제거했으므로 중첩횟수 1개를 줄이기 위한 2 또는 3을 괄호의 종류에 따라 나눈다. 만약 괄호의 종류가 맞지 않는 상태거나 비어있는 상태라면 잘못된 형식임으로 중단한다.

여기서 초기에는 형식이 알맞지 않은 경우에는 스택이 남아있을거라고 생각해 조건문을 남겨놨었다.

  • 인덱스 에러가떳다.
    그래서 괄호가 맞지 않는 경우와 pop할 경우가 없는 상태 일 때는 바로 종료시키는 break 문을 추가했었다.
  • 6%에서 실패했다.
    알고보니 ()] 와 같이 한번은 통과하는 케이스를 고려하지 않았다
    ans = 0이라는 조건을 추가하였고 성공하였다.

3. 코드

import sys

s = sys.stdin.readline().strip()
stack = []
ans = 0
temp = 1

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

if stack:
    print(0)
else:
    print(ans)
profile
Que sera, sera

0개의 댓글