풀이
처음엔 replace 를 이용해야하나 싶었으나 다른분들의 풀이를 보고 스택을 활용한 구현문제였다는 것을 알 수 있었다.
간단한 예시를 들어보자.
s = (()[[]])([])
이라고 주어졌을때,
stack은 아래와 같이 생성된다.
['(']
['(', '(']
['(', 2]
['(', 2, '[']
['(', 2, '[', '[']
['(', 2, '[', 3]
['(', 2, 9]
[22]
[22, '(']
[22, '(', '[']
[22, '(', 3]
[22, 6]
여기서 알아야 할 점은 주어진 문자열을 순서대로 리스트에 옮겨담으면서 괄호가 완성될 때 마다 조건문을 통해서 정수 부여 및 연산을 실시하면된다.
3번째 iteration 의 경우, 소괄호가 완성된 시점이다. 완성된 소괄호 사이에 정수가 없으므로 2 를 스택에 삽입하고 다음 반복으로 넘어간다.
6, 7번째 iteration 의 경우, 대괄호가 완성된 시점이다.
6번째 반복의 경우 완성된 대괄호 사이에 정수가 없으므로 3 를 스택에 삽입한다.
7번째 반복의 경우 현재 스택은 ['(', 2, '[', 3]
이다.
때문에 t 는 3 이 되고 9 가 스택에 삽입된다.
위와 같은 모든 연산을 마치면 [22, 6]
이라는 리스트가 완성되고, 리스트의 sum 을 구해주면 정답이다.
하지만 짝을 이루지 못한 괄호들이 남아있을 경우를 대비해 조건문을 통해 구별해주면된다.