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만큼 카운트를 더해주었다.
결과
'개인 공부 공간 > Algorithm' 카테고리의 다른 글
BOJ(백준) 15650번 N과 M (2) 파이썬 (0) | 2021.03.22 |
---|---|
BOJ(백준) 15649번 N과 M (1) 파이썬 (0) | 2021.03.22 |
BOJ(백준) 11047번 동전 0 파이썬 (0) | 2021.03.22 |
BOJ(백준) 1946번 신입 사원 파이썬 (0) | 2021.03.22 |
BOJ(백준) 2217번 로프 파이썬 (0) | 2021.03.22 |