Algorithm/백준

[백준/Python] 괄호

poppy 2021. 10. 6. 18:17
반응형

https://www.acmicpc.net/problem/9012

 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net

[ 처음 코드 ]

처음엔 괄호 개수를 세는 것으로 코드를 짰었다. 하지만 ')(' 같은 반례 때문에 결과는 틀렸다고 나왔다....ㅜ

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