반응형
https://www.acmicpc.net/problem/9012
[ 처음 코드 ]
처음엔 괄호 개수를 세는 것으로 코드를 짰었다. 하지만 ')(' 같은 반례 때문에 결과는 틀렸다고 나왔다....ㅜ
n = int(input())
for _ in range(n):
arr = list(input())
count = 0
while arr:
now = arr.pop()
if now == '(': count += 1
elif now == ')': count -= 1
if count == 0: print('YES')
else: print('NO')
[ 최종 코드 ]
n = int(input())
for _ in range(n):
data = input()
stack = []
for d in data:
if d == '(':
stack.append('(')
elif d == ')':
if len(stack) != 0 and stack[-1] == '(':
stack.pop()
else:
stack.append(')')
break
if len(stack) == 0: print('YES')
else: print('NO')
이 문제는 스택을 사용해서 해결할 수 있었다.
1. 괄호 문자열을 입력받는다.
2. 올바른 괄호 문자열인지 확인한다.
2-1. 괄호 문자 하나가 '(' 이면 스택에 삽입한다.
2-2. 괄호 문자 하나가 ')' 이고 스택이 비어있지 않고 스택의 마지막 값이 '(' 인 조건을 만족하면 스택에서 삭제한다. -> 올바른 괄호이기 때문에 없애는 것
2-3. 괄호 문자 하나가 ')' 이고 위의 조건을 만족하지 않는다면 스택에 값을 삽입하고 반복문을 빠져나온다 -> 위 조건을 만족하지 못하면 올바른 괄호가 아니기 때문에 반복문을 빠져나오는 것
3. 결과를 출력한다
반응형
'Algorithm > 백준' 카테고리의 다른 글
[백준/Python] 요세푸스 문제 0 (0) | 2021.10.10 |
---|---|
[백준/Python] 후위 표기식2 (0) | 2021.10.07 |
[백준/Python] 듣보잡 (0) | 2021.10.06 |
[백준/Python] 숨바꼭질 6 (0) | 2021.10.05 |
[백준/Python] 01타일 (0) | 2021.10.03 |