몸과 마음이 건전한 SW 개발자

백준 GOLD 5 [2504번] 괄호의 값 {언어 : Python} [다시 풀어 보기] 본문

알고리즘/다시 풀어 보기

백준 GOLD 5 [2504번] 괄호의 값 {언어 : Python} [다시 풀어 보기]

스위태니 2024. 8. 5. 20:56

문제 링크

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

정답 코드

def calculate_bracket_value(brackets):
    stack = []
    temp = 1
    result = 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] != '(':
                return 0
            if brackets[i-1] == '(':
                result += temp
            stack.pop()
            temp //= 2
        elif brackets[i] == ']':
            if not stack or stack[-1] != '[':
                return 0
            if brackets[i-1] == '[':
                result += temp
            stack.pop()
            temp //= 3

    if stack:
        return 0
    return result

brackets = input().strip()
print(calculate_bracket_value(brackets))

풀이 방법

 

  1. '('와 '['를 만나면 스택에 추가하고, temp 값을 각각 2와 3으로 곱한다.
  2. ')'와 ']'를 만나면 스택의 top을 확인하여 올바른 짝인지 확인한다.
    • 올바른 짝이라면 temp 값을 결과에 추가하고, 스택에서 pop하여 제거한다.
    • 그렇지 않다면 잘못된 괄호열이므로 0을 반환한다.
  3. 최종적으로 스택이 비어 있지 않으면 잘못된 괄호열이므로 0을 반환하고, 비어 있다면 계산된 결과를 반환한다.

 

느낀점

  • 무조건 다시 풀어서 익혀야 한다.
  • 매번 dfs로 풀라고 하다가 망치는데 이렇게 푸는게 훨씬 효율적이고 좋은 풀이같다.