해당 문제는 괄호가 올바르게 쳐져있는지를 확인하는 문제다. 이는 아래와 같은 원리로 코드를 작성할 수 있다.
- 괄호가 올바르게 나오는 경우는 '('와 ')'의 개수가 같은 경우다.
- 단, 개수가 같아도 )(의 경우 올바르지 않은 경우다. 따라서 우리는 수식이 올바른지 판단하기 위한 변수 하나를 선언할 것이다. 단, 초깃값이 0인 변수를 만들고 '('가 나온 경우는 +1, ')'가 나오는 경우는 -1을 더해주자. 해당 코드는 아래와 같이 작동된다.
- 변수가 -값으로 내려간 순간 해당 수식은 잘못된 수식이다. 괄호가 올바른 형식으로 작성되기 위해서는 무조건 '('가 먼저 나온 후 ')'가 나와야 하기 때문에 숫자가 음수가 될 수 없다. 따라서 이런 경우 탐색을 중지하고 "NO"를 출력한다.
- 모든 수식을 탐색 후 변숫값이 양수라면, '('가 더 많이 나왔다는 의미이므로 "NO"를 출력한다.
- 모든 수식을 탐색 후 변숫값이 0이라면 '('와 ')'의 짝이 맞다는 의미로 "YES"를 출력한다.
작성한 코드는 다음과 같다.
import sys
input = sys.stdin.readline
n = int(input())
for _ in range(n):
formula = input().rstrip()
checkFlag = 0 # VPS인지 체크하기 위한 변수
for bracket in formula:
if bracket == '(':
checkFlag += 1
else:
checkFlag -= 1
if checkFlag < 0:
break
if checkFlag == 0:
print("YES")
else:
print("NO")
'Algorithm > Data Structure' 카테고리의 다른 글
[백준] 10866: 덱 (python 파이썬) (2) | 2024.04.07 |
---|---|
[백준] 10845: 큐 (python 파이썬) (0) | 2024.04.06 |
[백준] 1406: 에디터 (python 파이썬) (0) | 2024.04.05 |
[백준] 1874: 스택 수열 (python 파이썬) (0) | 2024.04.04 |
[백준] 10828: 스택 (python 파이썬) (0) | 2024.04.04 |