Algorithm 문제 & 공부
스택 - 쇠막대기
somm12
2022. 6. 8. 15:21
arr = input()
stack = []
result = 0
for i in range(len(arr)):
if arr[i] == '(':
stack.append(arr[i])
else:
stack.pop()
if arr[i-1] == '(':
result += len(stack)
else:
result += 1
print(result)
# 레이저로 쇠막대기를 자르려고 한다. 총 쇠막대기 조각 수를 구하자.
# 여는 괄호와 가장 인접한 닫는 괄호 () 이 부분이 레이저이고 나머지 부분 여는 괄호부터 닫는 괄호까지는 쇠막대기 이다.
# 문제를 천천히 이해하면서 문제가 알려주는 그대로 손으로 쓰면서 또는 그림을 그려가면서 문제 풀이를 생각해보자.
# 여는 괄호는 stack에 추가, 만일 닫는 괄호 바로 앞에 여는 괄호가 있다면 레이저를 만나는 것이므로,
# 스택에 남은 여는 괄호 즉, 막대기 개수를 센다.
# 그 이후 닫는 괄호는 막대기가 잘려진 뒷부분 +1 을 해준다.
레이저가 발사되고 그 전 스택에 남아있는 여는 괄호 개수를 차근차근 더하고 닫는 괄호를 만났을 때 +1 씩해준다.