Python

백준10799 Python

Son 2023. 10. 22. 18:05

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

 

10799번: 쇠막대기

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

www.acmicpc.net

bar_razor = list(input()) #한 줄에 쇠막대기와 레이저의 배치를 나타내는 괄호 표현이 공백없이 주어진다.
answer = 0 #쇠막대기의 개수
st = [] #잘려진 쇠막대기를 담을 리스트 st

for i in range(len(bar_razor)): #쇠막대기와 레이저의 배치를 나타내는 배열 bar_razor
    if bar_razor[i] == '(': #만일 해당 리스트의 값이 ( 라면
        st.append('(') #st list에 쇠막대기 추가

    else:  # ) 일 경우
        if bar_razor[i-1] == '(': #배열 최근값이 ( 인지 확인하면
            st.pop() #레이저를 위에서 수직으로 발사
            answer += len(st) #잘려진 쇠막대기 수 만큼 리스트 배열의 개수만큼 answer값 추가

        else: #배열 최근값이 ) 인지 확인하면
            st.pop() #레이저를 위에서 수직으로 발사
            answer += 1 #오른쪽에 잘려진 쇠막대기 개수 1 추가 해주기

print(answer)

https://daekyoulibrary.tistory.com/entry/Python-%EB%A6%AC%EC%8A%A4%ED%8A%B8list-%EC%97%B0%EC%82%B0-insert-pop-remove-reverse-sort-index-count

 

[Python] 리스트(list) 연산 - insert(), pop(), remove(), reverse(), sort(), index(), count()

insert() insert(x, y)는 리스트의 x번째 위치에 y를 삽입 기존에 x번째 위치에 있던 원소와 그 뒤 원소들은 한 칸씩 뒤로 밀린다. L = [0, 1, 2] L.insert(2, 10) print(L) # [0, 1, 10, 2] pop() 리스트의 맨 마지막 원

daekyoulibrary.tistory.com

스택을 이용해 해결한다

( 기호가 들어오면 ST리스트에 넣는다 레이저로 잘랐을떄의 (의 개수가 레이저로 잘린 막대기의 개수이다

 

(기호 후 )가 들어오면 레이저로 자르는 의미이므로 )를 pop시켜주고 (의 개수만큼 더해준다

 

)기호 다음에 )기호가 들어오면 마찬가지로 레이저로 자른)은 pop시켜주고 )의 개수만큼 1씩 더해준다