이번 문제는 이해는 바로 됐는데 어떻게 풀어야하는지에 대한 생각이 오래 걸렸다.
문제를 봤을 때 () 레이저가 나오면 그 전에 나온 괄호만큼 개수를 쳐주는거까지는 생각을 했는데 그럼 그 다음꺼는?에서 어떻게 해야할지에 대해 생각을 못했다. 지금 푼 입장으로 거의 다온거였는데 오래걸리다니...
일단 코드를 보자
import sys
input = sys.stdin.readline
iron_bar = input().strip()
stack = []
result = 0
for i in range(len(iron_bar)):
if iron_bar[i] == "(": # '('가 나오면 스택에 계속 쌓음
stack.append('(')
else: # ')'가 나오면
stack.pop() # 우선 pop을 함
if iron_bar[i-1] == "(": # 그리고 이전에 '(' 이게 있으면 레이저니까
result += len(stack) # 쇠막대기 개수 추가
else:
result += 1 # 이전 값이 ')'면 쇠막대기의 끝이니 개수 추가
print(result)
주석을 살짝 달긴 했는데 추가로 얘기를 하면
왜 pop을 먼저 하냐면 레이저여도 그 전꺼를 pop 해야하고, 쇠막대기의 끝이면 여는 괄호도 빼야하니 pop을 한다.
그리고 남아있는 스택값을 계속 더하면 한번에 연산 가능!
이거를 생각해내는게 핵심이었던거 같다(내 생각)
나도 척척 떠올랐으면....