Coding Test/Baekjoon
[Python] 파이썬 백준(9012) 괄호
파송송
2023. 4. 4. 15:32
728x90
https://www.acmicpc.net/problem/9012
9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
나의 풀이
스택을 사용하는 문제로 괄호로 구성된 문자열이 바르게 되어있다면 YES, 아니라면 NO를 출력하는 문제이다.
6
(())())
(((()())()
(()())((()))
((()()(()))(((())))()
()()()()(()()())()
(()((())()(
NO
NO
YES
NO
YES
NO
- 우선 괄호를 하나씩 뽑아 ')'일 때는 check에 +1을 해주고 '('일 때는 -1을 해줌
- (일 때 check = 0 이라면 순서가 꼬여 들어간 것이기 때문에 반복문을 break 해주고 Check에 -1을 넣어 No를 출력함
import sys
cnt = int(sys.stdin.readline())
for _ in range(cnt):
ps = list(sys.stdin.readline())[:-1]
check = 0
while ps :
p = ps.pop()
if p == '(' and check ==0 :
check = -1
break
if p == ')':
check += 1
else:
check -= 1
if check == 0:
print("YES")
else:
print("NO")
다른 사람의 풀이
나는 (일 때 check가 0이라면 괄호의 짝이 맞지 않다고 판단하였음
이 코드에서는 size(=check)가 0보다 작을 때 괄호의 짝이 맞지 않다고 판단함
import sys
N = int(input())
for i in range(N):
line = sys.stdin.readline()
size = 0
is_vps = True
for s in line:
if s == '(':
size += 1
elif s == ')':
size -= 1
if size < 0: # 짝이 맞는 여는 괄호가 없는 경우
is_vps = False
break
if size != 0:
is_vps = False
if is_vps:
print('YES')
else:
print('NO')
728x90