아이공의 AI 공부 도전기

[Baekjoon] 10799번 : 쇠막대기 (Python)

 

     

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

 

10799번: 쇠막대기

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

www.acmicpc.net

Python

 

방법 1 - 메모리 32644KB / 시간 100ms / 코드 길이 288B

 

stack에는 index를 넣을 것이다.

그리고 입력받은 t에 대해서 각 index별로 for문을 돌린다.

for문을 돌릴 때 '('라면 stack에 넣고 ')'인 경우 pop을 진행한다.

중요한 것은 pop한 이후인데 만약 직전의 인덱스 값과의 차이가 1인 경우, 즉, '()'와 같은 모양이 있는 경우 laser로 판단해야한다.

laser로 판단했다면 laser 기준 stack에 쌓인 개수를 cnt에 더한다.

그리고 단순 '()'인 경우가 아닌 경우 stick의 개수만큼을 추가로 더함으로써 총 개수를 마무리한다.

 

t = [i for i in input()]
stack = []
cnt = 0
for i in range(len(t)):
    if t[i] == '(':
        stack.append(i)
    if t[i] == ')':
        tmp = stack.pop()
        if i - tmp == 1:
            cnt += len(stack)
        else:
            cnt += 1
print(cnt)

 

 

방법 2 - 메모리32644KB / 시간 96ms / 코드 길이 282B

 

 방법 1과 동일하며 약간의 정돈과 변경이 있는 코드이다.

 

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

 

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading