📖 문제 링크
https://www.acmicpc.net/problem/9012
9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
👩💻 문제풀이
문자열을 입력받고 짝을 맞춰주면 되는 문제이다.
본 문제에서는 각 괄호의 방향에 따라 sum에 +1과 -1을 해주었는데,
여기서 나는 조건을 하나 빠뜨려 계속 다른 결과가 나왔다.
'괄호'는 말 그대로 '괄호'이기에, 꼭 ( ) 모양의 쌍으로 이뤄져야 하며, )( 이런식으로 전 후 모양이 바뀌면 안 된다.
그렇기에 그저 카운트를 올리고 내리며 0을 맞추는 것이 아니라, 방향까지 고려해야한다는 사실!
괄호는 언제나 ( 모양이 먼저 오기 때문에, ) 모양이 먼저 올 경우 sum은 무조건 -1이 될 것이다.
입력 | ( | ) | ) | ( | ( | ) |
sum | 1 | 0 | -1 | 0 | 1 | 0 |
위의 표에서 볼 수 있듯, 쌍이 이뤄지지 않아도 갯수가 맞는 경우가 있다.
)가 먼저 들어오면 -1이 되므로 조건을 추가해주면 해결된다.
나머지 경우는 반복문을 모두 돌고 난 후 sum의 결과를 확인한다.
✅ 최종 코드
n = int(input())
for i in range(n):
vps = list(input())
sum = 0
for j in range(len(vps)):
if vps[j] == '(' :
sum += 1
elif vps[j] == ')':
sum -= 1
if sum < 0:
print('NO')
break
if sum > 0:
print('NO')
elif sum == 0:
print('YES')
'알고리즘 > Python' 카테고리의 다른 글
[백준/Python] 1158번: 요세푸스 문제 (0) | 2022.01.31 |
---|---|
[백준/Python] 1406번: 에디터 (0) | 2022.01.31 |
[백준/Python] 11655번: ROT13 (0) | 2022.01.25 |
[백준/Python] 11652번: 카드 (0) | 2022.01.25 |
[백준/Python] 10989번: 수 정렬하기 3 (0) | 2022.01.24 |