[백준/Python3] 10799 쇠막대기

nyam·2022년 2월 21일
0

백준

목록 보기
2/34
post-thumbnail

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


코드

# 10799.py 쇠막대기

batch = list(input())
st = list()
ans = 0

for i in range(len(batch)):
    if batch[i] == '(':
        st.append(batch[i])
    elif batch[i] == ')' :
        if batch[i-1] == '(':
            st.pop()
            ans += len(st)
        else:
            st.pop()
            ans += 1

print(ans)

스택을 이용하여 해결하는 문제다.
주어진 괄호표현에서 '('가 나왔을 경우 아직 레이저인지, 막대기인지 구분할 수 없으므로 일단 스택에 push한다.
괄호표현에서 ')'가 나왔을 경우 이전 괄호표현에 따라 레이저, 막대기로 구분할 수 있다. 이전이 '('가 나왔을 경우 레이저이므로 막대기가 잘려 현재 막대기의 개수만큼 조각이 증가한다. 따라서 현재 스택의 길이를 더한다. 이전이 ')'가 나왔을 경우 막대기의 끝을 의미한다. 이때, 끝점이 서로 겹치는 막대기가 없기 때문에 끝나는 막대기는 오직 하나이므로 1개를 더하면 된다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN