[백준] 2504번 : 괄호의 값

James·2023년 6월 25일
1

코딩 테스트

목록 보기
3/41
post-thumbnail

문제

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

풀이

[백준] 2504 : 괄호의 값 🥈(실버1)

  • [알고리즘 : 자료구조(스택)]

<✅ 문제 요약>
0. ‘()’ 인 괄호열의 값은 2이다.
1. ‘[]’ 인 괄호열의 값은 3이다.
2. ‘(X)’ 의 괄호값은 2×값(X) 으로 계산된다.
3. ‘[X]’ 의 괄호값은 3×값(X) 으로 계산된다.
4. 올바른 괄호열 X와 Y가 결합된 XY의 괄호값은 값(XY)= 값(X)+값(Y) 로 계산된다.
5. 단, ‘(()[[]])’나 ‘(())[][]’ 는 올바른 괄호열이지만 ‘([)]’ 나 ‘(()()[]’ 은 모두 올바른 괄호열이 아니다.

<✅ 풀이방법>

0. temp에 ( 만나면 2 곱해주고 / [ 만나면 3 곱해주고
1. )를 (뒤에 바로 만나면 answer에 temp를 더해주고 temp를 2로 나눠줌

코드(code)

import sys
input = sys.stdin.readline 
Bracket = list(input())
stack = []
answer = 0
temp = 1

# temp 값에 ( 만나면 2 곱해주고 / [ 만나면 3 곱해주고 
# )를 (뒤에 바로 만나면 answer에 temp를 더해주고 temp를 2로 나눠줌
for i in range(len(Bracket)):
    if Bracket[i] == '(':
        temp *=2
        stack.append(Bracket[i])
    elif Bracket[i] == '[':
        temp *=3
        stack.append(Bracket[i])
    elif Bracket[i] == ')':
        if not stack or stack[-1] == "[":
            answer = 0
            break
        if Bracket[i-1] =='(':
            answer += temp
        stack.pop()
        temp = temp //2 
    elif Bracket[i] == ']':
        if not stack or stack[-1] == "(":
            answer = 0
            break
        if Bracket[i-1] == '[':
            answer += temp
        stack.pop()
        temp = temp // 3

만일 stack에 값이 있다면 answer=0
if stack:
    answer = 0
    print(answer)
else:
    print(answer)

회고

  • 자료구조 stack을 통해서 문제를 풀었는데 해당 문제를 stack으로 생각하고 접근하는게 까다로웠다.
profile
의미있는 성장의 태도, 긍정적인 사고를 지닌 Deveolper

0개의 댓글