문제풀이/백준(Boj) 문제풀이

[백준][스택] - 10799. 쇠막대기(파이썬)

얄루몬 2022. 7. 17. 02:02

#쇠막대기
s= input()
stack = []
cnt = 0

for i in range(len(s)):
    if s[i] == "(":
        stack.append(s[i])
    else:
        #어차피 )인 경우엔 pop해주어야 한다.
        stack.pop()
        if s[i-1] != ')':
            cnt += len(stack)
        else:
            cnt += 1
print(cnt)

  • 잘 살펴보면 레이저로 끊는 부분은 해당 막대기 갯수만큼 쌓인다. 이는 stack에 쌓인 "(" 여는 괄호의 갯수와 동일하다.
  • ")" 뒤에 또 닫는 괄호가 올 땐 해당 막대기의 끝 부분을 의미한다. 이때는 더이상 막대기가 진행되지 않으므로 끄트머리 1개를 추가해주는 식이다.