9012번: 괄호
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고
www.acmicpc.net
문제를 보고나서 얼마지나지않아든 생각은 어 이거그냥
왼쪽 괄호와 오른쪽 괄호 수를 새서 둘이 같으면 YES 아니면 NO로 하면안되나?
라는 생각이었다
하지만 바로 틀렸습니다가 떳다
그후 혹시 내가
입력으로 아무것도 주어지지않았을때를 고려하지 않았던건가 싶어서 코드를 약간 수정했는데도 결과는 같았다
import sys
input=sys.stdin.readline
N=int(input())
for i in range(N):
ps=input().strip()
left=0
right=0
for j in ps:
if j=="(":
left+=1
else:
right+=1
if left+right==0:
print("NO")
else:
if left==right:
print('YES')
else:
print('NO')
주어진 예제 중에 반례가 있다는 사실을 깨달은건 꽤 오랜시간이 지난후였다
너무 졸린 상태로 풀어서 그랬을까?(너무졸려서 업드려서 중간에 잠),
아니면 내가 틀릴수없다는 자만심때문이었을까
())(()이다
그렇다
괄호짝의 개수만 맞으면 YES를 출력하는 나의 코드는
)(
와같은 입력이 주어졌을때
정답으로 인식한다
괄호가 만들어지려면 무조건 왼쪽 괄호가 먼저나오고 그다음 오른쪽 괄호가 나온다
왼쪽괄호 일경우 push
오른쪽괄호 일경우 pop하는 방식으로 구현하면 될것같다
오류가 발생하게된다면 NO
그렇지않다면 YES를 출력한다
또한 오른쪽괄호개수와 왼쪽괄호의 개수가 같을때만 YES를 출력한다
import sys
input=sys.stdin.readline
N=int(input())
for i in range(N):
ps=input().strip()
stack=[]
ans=0
try:
for j in ps:
if j=="(":
stack.append(0)
ans+=1
else:
stack.pop()
ans-=1
except:
print('NO')
else:
if ans==0:
print('YES')
else:
print('NO')
백준 큐 2 파이썬 (0) | 2022.08.30 |
---|---|
백준 오큰수 파이썬 (0) | 2022.08.28 |
백준 스택 파이썬 (0) | 2022.08.21 |
백준 주유소 파이썬 (0) | 2022.08.21 |
백준 잃어버린 괄호 파이썬 (0) | 2022.08.20 |