본문 바로가기
알고리즘

[파이썬/Python] 백준 9012번: 괄호

by Rudy 2022. 7. 21.

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

 

9012번: 괄호

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

www.acmicpc.net

백준 9012번 괄호 문제를 풀었다.

문자열 문제이다.


코드

t=int(input())
for _ in range(t):
    vps=input()
    for i in range(len(vps)//2+1):
        vps=vps.replace('()','')
    if len(vps)==0:
        print('YES')
    else:
        print('NO')

코드 설명


입력은 T개의 테스트 데이터로 주어지기 때문에 테스트 케이스 t를 입력받은 다음, t만큼 루프문 돌리면서 괄호 문자열을 입력받는다.

최대로 나오는 괄호의 갯수는 입력받은 괄호 문자열 길이의 반만큼이다. 왜냐면 괄호가 () 이렇게 두개가 한 쌍이라서 그렇게 설정했다.(아닐 수도 있음)

그래서 괄호 문자열 길이의 반만큼 루프 돌리면서 replcae() 함수를 이용해서 입력받은 문자열에 있는 괄호 한 쌍을 다 없애준다.

최종적으로 나온 vps의 길이가 0이라면 괄호가 다 () 이렇게 되어 있어서 다 사라졌기 때문에 걔는 vps가 맞다.

그래서 YES를 출력해주면 된다.

vps의 길이가 0이 아니라면 걔는 vps가 아니라는 거니까 NO를 출력해주면 된다.

 

다른 풀이


다른 사람들은 어떻게 풀었나 검색을 해봤다. 근데 이 문제 스택으로 푸는 거였다. 문제 분류에도 스택이 들어가있었는데 안 봐서 몰랐다.

 

https://wookcode.tistory.com/49

 

[백준] 9012번 괄호 (Python)

문제 www.acmicpc.net/problem/9012 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열..

wookcode.tistory.com

t=int(input())

for _ in range(t):
	vps=input()
    stack=[]
    for i in vps:
    	if i=='(':
        	stack.append(i)
        elif i==')':
        	if stack:
            	stack.pop()
            else:
            	print('NO')
                break
    else:
    	if len(stack)==0:
        	print('YES')
        else:
        	print('NO')

 

스택을 이용한 풀이는 이 분의 글을 참고했다.

 

입력받은 괄호 문자열의 길이만큼 루프 돌리면서 만약 ( 이라면 스택에 (를 추가한다.

그리고 ) 이라면 스택에 (가 있는지 없는지 확인해서 스택에 (가 있으면 pop() 이용해서 (를 꺼내준다.

스택에 아무것도 없는 상태라면 바로 NO를 출력하고 루프문을 빠져 나와서 바로 다음 괄호 문자열을 받아서 다시 진행하면 된다.

for-else문을 이용해서, for문을 이상없이 다 수행했고, 스택이 전부 비어져 있으면 () 괄호 한 쌍이 전부 차곡차곡 없어졌다는 것이기 때문에 YES를 출력하고, 스택에 아직 괄호가 남아 있으면 vps가 아니기 때문에 NO를 출력한다.

댓글