백준 - 2504

Giho Kim·2023년 9월 26일

코테 연습

목록 보기
11/26

문제

어떻게 풀어야 될지 생각을 못해 막막했다.

결국 답지를 보면서 이해 할 수 있었다.

  1. 4개의 case에서 봐야한다
  • "("일땐 stack에 넣어주고 tmp * 2
  • "["일땐 stack에 넣어주고 tmp * 3
  • ")"일땐 먼저 stack의 마지막이 '('인지 체크 후 paren[i - 1]이 "("라면 ans += tmp 해주고 tmp = tmp // 2 그리고 stack.pop
  • "]"일떈 먼저 stack의 마지막이 '['인지 체크 후 paren[i - 1]이 '['라면 ans += tmp 해주고 tmp = tmp // 3 후 stack.pop
  • (()[[]])([]) 이거일때 앞에서 부터

tmp = 2 2 ans = 4
tmp = 2
3 3 ans = 4 + 18
tmp = 2
3 ans = 4 + 18 + 6 = 28

parens = list(input())

stack = []
ans = 0
tmp = 1

for i in range(len(parens)):
    b = parens[i]

    if b == "(":
        tmp *= 2
        stack.append(b)

    elif b == "[":
        tmp *= 3
        stack.append(b)

    elif b == ")":
        if not stack or stack[-1] != "(":
            ans = 0
            break
        if parens[i - 1] == "(":
            ans += tmp
        tmp = tmp // 2
        stack.pop()

    elif b == "]":
        if not stack or stack[-1] != "[":
            ans = 0
            break
        if stack[-1] == "[" and parens[i - 1] == "[":
            ans += tmp
        tmp = tmp // 3
        stack.pop()

if stack:
    ans = 0
print(ans)
profile
취준돌이 개발자 김기호

0개의 댓글