출처 | https://www.acmicpc.net/problem/10799
해당 문제는 문제를 분석 하는데 있어 많은 시간이 소요 됐다. 문제를 풀 때 마다 분석력의 필요성을 느끼고 있다.
1번 예제와 2번 예제를 이해해야 한다.
1) 레이저가 나올 때 여는 괄호가 나온 만큼 스택에 추가한다.
2) 레이저가 아닐 경우에 닫는 괄호가 나오면 결과값에 1개를 카운팅 해야한다.
해당 부분은 해당 블로그를 참고하면 된다.
# 해당 문제를 풀 때 3가지를 고려해야된다. [스택 이용]
# ')' -> '(' 일 경우 -> len(stack)
# ')' -> ')' 일 경우 -> cnt+=1
word = input() # 문자열로 받는다. -> index -> for
stack = []
cnt = 0
# for문을 돌면서 -> 문자열 검사를 실시한다.
for i in range(len(word)): #word를 쪼개면서 진행한다.
if word[i] == '(':
stack.append(word[i]) # i는 안되는가?
else: #이렇게 조건을 주는 것 자체가 ')'을 내포한다.
if word[i-1] == '(':
stack.pop(-1) # top을 pop한다.
cnt += len(stack)
else: # word[i-1] == ')' 일 경우
stack.pop(-1)
cnt += 1
print(cnt)