BOJ(백준) 10799번 쇠막대기 파이썬

2021. 3. 22. 22:33개인 공부 공간/Algorithm

 

10799번: 쇠막대기

여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저

www.acmicpc.net


코드

import sys
r=sys.stdin.readline
metal=list(r().rstrip())
cnt=0
stack=[]
for i in range(len(metal)):
    if metal[i]=='(':
        stack.append(i)
    else:
        if metal[i-1]=='(':
            stack.pop()
            cnt+=len(stack)
        else:
            stack.pop()
            cnt+=1
print(cnt)

 

해설

입력받은 문자열들을 metal 이라는 리스트에 저장 후 순회하며 ( 인 경우 우선 stack 에 넣어주었다. 순회도중 ) 을 만나면 그 직전 문자열이 ( 였던 경우에는 쇠막대기를 절단하는 레이저 () 모양이기 때문에 stack 의 마지막 요소를 pop 해줌과 동시에 stack 의 길이만큼 카운트를 더해주었다. stack 내부의 ( 수는 쇠막대기의 시작을 의미하기 때문에 길이만큼 카운트 해주면 된다고 판단하였다. 반면 ) 전 문자열도 ) 인 경우에는 하나의 쇠막대기의 끝을 의미하기 때문에 1만큼 카운트를 더해주었다.

 

결과

쇠막대기결과.PNG

출처: https://privatedevelopnote.tistory.com/81 [개인노트]