본문 바로가기
프로그래밍/알고리즘

백준 9012 괄호 파이썬

by monicada 2022. 11. 29.
728x90

문제

 

9012번: 괄호

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

www.acmicpc.net

 

해결코드 

#변수 할당 
a = int(input())

for i in range(a):
    b = int(input())
    s = list(b)
    #변수 초기화 
    sum = 0
    for i in s:
        #여는 괄호가 나오면 
        if i == '(':
            #+1을 해주고
            sum += 1
        #닫는 괄호가 나오면 
        elif i == ')':
            #-1을 해준다 
            sum -= 1
        #닫는 괄호가 여는 괄호보다 많다면 
        if sum < 0:
            print('NO')
            break
    #여는 괄호가 닫는 괄호보다 많다면 
    if sum > 0:
        print('NO')
    #닫는 괄호의 개수 == 여는 괄호의 개수라면 
    elif sum == 0:
        print('YES')

이 문제를 풀면서 'break'부분의 두번째 위에 'if sum<0'이 나오고 뒤에 'if sum<0'을 검증하는 코드가 나오면 정답이 되고 순서가 바뀌면 오답이 되는데 아직도 명확하게 이해하지는 못했다..(나는 둘다 상관없이 정답이 되어야 한다고 생각)

우선 이해한 논리는 '('로 시작했으니 +된 상태로 끝날 확률이 더 높다는 점....?

나중에 문제를 더 풀고 이 문제에 돌아오면 좀 더 이해할 수 있을거라고 생각한다 

숏코딩

for _ in range(int(input())):
    b = input()
    while '()' in b:
        #같은 쌍을 아예 삭제함 
        b = b.replace('()','')
    print("NO" if b else "YES")

처음에 이 문제를 보고 '('와 ')'의 개수를 대조해야하는데 코드로 인식하는지도 몰라서 이게 되는지 궁금했다 

숏코딩이 손코딩한다면 이렇게 풀이할거라고 생각하면서 해결한 코드이다 

재미있는 문제였다 

댓글