본문 바로가기
알고리즘/자료구조

[백준][Python] 10799번 쇠막대기

by 임짠짠 2022. 2. 8.
반응형
 

10799번: 쇠막대기

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

www.acmicpc.net

코드

 

inp = []
stack = []
cnt = 0
ans = 0

inp = list(input())

for i in inp:
    if i == '(':
        stack.append(i)
        cnt = 0
    elif i == ')':
        stack.pop()
        if cnt == 0:
            if len(stack) > 0:
                ans += len(stack) 
        else:
            ans+=1   
        cnt = 1
        

print(ans)

 

설명

 

'('일 때는 스택에 집어넣고 ')'가 나오면 pop을 해주었다. '(' 다음에 바로 ')' 가 나오면 스택에 있는 '(' 의 개수 만큼 ans에 더해준다.

cnt 변수는 레이저와 쇠막대기를 구분하기 위해 써주었다. cnt 가 0일때 ')' 가 오면 레이저, cnt가 1일 때 ')' 가 오면 쇠막대기로 인식하게 했다.

현재 ans 값을 보면 레이저가 마지막으로 지나간 이후의 조각은 아직 더해주지 않았기 때문에 cnt 가 1일 때 ')' 가 와서 쇠막대기의 오른쪽 끝이 나오게 되면 ans에 1을 더해주었다. 

 

반응형

댓글