728x90
반응형
<문제>
<소스코드>
n = int(input()) for i in range(n): a = list(input()) tmp = [] cnt = 0 for j in a: if j == "(": tmp.append(j) elif j == ")": if not tmp: print("NO") cnt = 1 break else: tmp.pop() if not tmp and cnt == 0: print("YES") elif len(tmp) != 0 and cnt == 0: print("NO")
<NOTE>
1. Solution
리스트 a내의 "("와 ")"의 개수가 다른 경우 또는 a의 첫 원소가 ")"인 경우는 NO이다. 먼저 "("와 ")"의 개수를 체크하기 위해, tmp라는 리스트를 만든 후 a의 원소가 "("이면 "("을 tmp에 넣고 ")"이면 tmp의 마지막 원소를 삭제한다. a의 원소를 모두 처리하면 올바른 괄호 문자열(VPS)일 경우 모두 상쇄되어 tmp가 비어있을 것이다. 따라서 tmp가 비어있다면 YES를 그렇지 않다면 NO를 출력한다.
주의할 점은 만약, a의 원소가 ")"으로 시작하면 break를 통해 검토를 멈추고 NO를 출력하는데, 이때 tmp는 비어있다는 것이다. 따라서 tmp가 비어있지만 VPS가 아닌 경우를 제외해야 한다. 그러기 위해서 cnt라는 변수를 만들어 0으로 초기화하고, tmp가 비어있지만 VPS가 아닌 경우일 때 cnt를 다른 숫자로 업데이트한다.
결론적으로 tmp가 비어있으면서 cnt가 0이면 "YES"를 출력하고, 원소가 ")"로 시작하는 경우와 tmp가 비어있지 않으면서 cnt가 0인 경우는 각각 "NO"를 출력한다.
728x90
반응형
'알고리즘 > 스택 \ 큐 \ 덱' 카테고리의 다른 글
#12 [파이썬] 백준 7785번 문제: 회사에 있는 사람 (0) | 2021.04.13 |
---|---|
#11 [파이썬] 백준 2841번 문제: 외계인의 기타 연주 (0) | 2021.04.13 |
#10 [파이썬] 백준 4949번 문제: 균형잡힌 세상 (0) | 2021.04.07 |
#8 [파이썬] 백준 10845번 문제: 큐 (0) | 2021.04.07 |
#7 [파이썬] 백준 10828번 문제: 스택 (0) | 2021.04.06 |
댓글