백준 9012(괄호) - Python(파이썬) - 문자열
반응형
Stack을 사용하지 않은 풀이
접근 방법
1) " ( " 의 개수와 " ) "의 개수가 같기
2) 위 조건에 예외의 경우로 (()(()가 있는데 이 경우는 개수는 같지만 )(이런식으로 남아서 NO가 된다. 즉, 방향도 참고
풀이방법
① " ) " 인 경우 cnt값을 +1
② " ( " 인 경우 앞에 )이 없는 경우만 사라질 수 있기 때문에 cnt값이 양수인 경우에는 셀 필요가 없다
-> " ( " 이고 cnt<=0 인 경우에만 cnt값을 -1
③ 따라서 cnt==0인 경우만 VPS 이다
import sys
T = int(sys.stdin.readline())
array=[]
for i in range(T):
str=sys.stdin.readline()
cnt=0
for j in str:
if j==")":
cnt+=1
if j=="(" and cnt<=0:
cnt-=1
if cnt==0:
array.append("YES")
else:
array.append("NO")
for i in array:
print(i)
stack을 사용한 풀이 방법
풀이 방법(stack 사용)
① " ( " 이 나온 경우
1. stack에 넣음(append)
② " ) "이 나온 경우
1. stack에 문자가 있는 경우 -> stack에 " ( " 문자가 있다는 이야기이므로 " ) " 이 오면 VPS이므로 stack에서 pop 하기
2. stack에 문자가 없는 경우 -> stack에 "( " 문자가 없으므로 VPS가 아니므로 무조건 VPS 가 아니다
-> print ('NO') + break
③ break가 안된 ⓛ -1 번과 ② -1 번의 경우 VPS인지 확인해줘야한다. ( else )
1. stack에 문자가 있는 경우
-> stack에 문자가 있다는 것은 " ( "의 문자열이 많다는 이야기로 VPS가 아니다.따라서 print('NO')
2. stack에 문자가 없는 경우
-> VPS이므로 print('YES')
import sys
T = int(sys.stdin.readline())
for _ in range(T):
str = sys.stdin.readline().rstrip()
stack = []
for i in str:
if i=='(': #1번의 경우
stack.append(i)
elif i==')': #2번의 경우
if stack:#스택에 문자가 있는 경우
stack.pop()
else:#스택에 문자가 없는 경우
print('NO')#이미 )만 들어가므로 VPS가 될 수 없다
break
else:#break가 안된 경우만 하도록(3번의 경우)
if stack:
print('NO')
else:
print('YES')
반응형
'[백준] Python,Java로 풀기📖 > 문자열' 카테고리의 다른 글
백준 1543(문서 검색) - Python(파이썬) - 문자열 (0) | 2022.06.23 |
---|---|
백준 1296(팀 이름 정하기 ) - Python(파이썬) - 문자열 (0) | 2022.06.01 |
백준 1120(문자열) - Python(파이썬) (0) | 2022.05.27 |
백준 1920( 수 찾기 ) - Python(파이썬) (0) | 2022.05.13 |
백준 6198(옥상 정원 꾸미기 ) - Stack , Python (0) | 2022.05.13 |