💡문제접근
- 괄호 문자열을 입력받았을 때 만약 "("이 들어온다면 스택에 추가해주고 ")"이 들어온다면 제거해주는 방식으로 코드를 작성했다.
- ")"이 들어오는 경우 두 가지로 나눠주었다. 만약 스택의 마지막 원소의 값이 "("이 된다면 쌍을 이루어 제거해줄 수 있지만 그렇지 않고 스택이 비어있다면 제거해줄 원소가 없기 때문에 ")"을 스택에 추가해줬다.
- 위 과정을 계속 반복했을 때 만약 스택이 비어있다면 올바른 괄호 문자열이므로 YES를 출력하고 스택이 비어있지 않다면 올바르지 않은 괄호 문자열이므로 NO를 출력한다.
- 문제를 맞추고 나서 다른 사람들의 코드를 확인했는데 스택을 쓰면서
pop()
을 사용한 코드가 여럿 있었다. 이 부분도 참고해서 보충 공부했다.
💡코드(메모리 : 30616KB, 시간 : 48ms)
T = int(input())
for _ in range(T):
Parenthesis_String = input()
stack = []
for i in Parenthesis_String:
if i == "(":
stack.append("(")
else:
if stack == []:
stack.append(i)
else:
if stack[-1] == "(":
stack.remove(stack[-1])
if stack == []:
print("YES")
else:
print("NO")
💡소요시간 : 20m