잘려진 쇠막대기 조각의 총 개수를 구하기.
입력 | 출력 |
---|---|
()(((()())(())()))(()) | 17 |
(((()(()()))(())()))(()()) | 24 |
: 잘려진 막대 수는 해당 막대 ( .... )
안의 레이저 ()
개수 +1 이다. 이들의 합을 구하면 된다.
i번째 원소가 (
이면 stack에 인덱스를 저장한다.
i번째 원소가 )
이면 stack에서 pop한다. 이 pop한 원소가 짝을 이루는 원소의 인덱스 이므로, 둘의 인덱스 범위 내의 원소에서 ()
개수+1 을 더한다.
-> 시간 초과 발생 ---> 방법을 바꿔야 한다.
(
를 만나면 스택에 넣는다.)
를 만났을 때
- 바로 전 원소가
(
이라면 레이저 이므로 pop하고 남은 스택의 길이 만큼을 더해준다.- 바로 전 원소가
)
이라면 막대 하나의 길이가 끝난 것이므로 +1을 해준다.
import sys
string = sys.stdin.readline().strip()
stack = []
result = 0
for i in range(len(string)):
if string[i]=='(':
stack.append(string[i])
elif string[i]==')':
if string[i-1] == '(': #레이저
stack.pop()
result += len(stack)
elif string[i-1] == ')': #쇠막대기 길이 끝
stack.pop()
result += 1
print(result)