스택을 이용해서 올바른 괄호를 찾는 문제이다.
여기서 올바른 괄호란 ( ) 의 짝이 맞는 괄호이다.
)( 은 올바르지 않은 괄호이다.
스택에 '(' 괄호가 나올 때마다 삽입하고 ')'가 나오면 삭제하는 방식으로 풀 수 도 있고
파이썬의 replace 함수를 이용하여 문제를 해결할 수 도 있다.
( ) 모양의 괄호를 "" 으로 대체한다.
예를 들어, (( )) 의 형태에서 replace를 한 번 호출하면
( )모양이 된다. 여기서 replace를 한 번 더 호출하면 문자열이 최종적으로 ""이 된다.
코드를 살펴보면 flag를 이용하여 replace 함수를 처음 적용하는지 아닌지를 먼저 이용한다. 처음이 아닌 경우에 s를 tmp로 다시 초기화하고 만약 tmp==s가 되면 종료한다.
즉, replace가 문자열에 아무런 영향을 미치지 못하는 경우이다.
올바른 괄호인 경우에는 종료 시에 s에는 아무것도 들어있지 않을 것이다.
직접 리스트에 값을 삽입하는 것 대신에 a라는 변수에 1을 더하고 빼는 것으로 스택을 구현했다.
올바른 괄호라면 끝났을 때, a의 값이 0일 것이다. 하지만 )( 모양도 0을 만들기 때문에 그걸 방지하기 위해서 ( 가 들어왔을 때, a 값이 음수가 되면 반복문을 종료하도록 한다.