상세 컨텐츠

본문 제목

백준 괄호 파이썬

프로그래밍/백준풀이

by 아싸호랑나비 2022. 8. 25. 20:43

본문

문제링크

 

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

관련글 더보기