[백준] 9012 - 괄호 (Python, 숏코딩 포함)

반응형

BAEKJOON's Logo

Contents

    * 일반 풀이와 숏코딩 풀이

    ## 일반 풀이
    T = int(input()) ## 테스트케이스
    for _ in range(T):
        brk_list=list(input()) ## 괄호 리스트
        pair_check=0
        for brk in brk_list:
            if brk == '(':
                pair_check+=1
            elif brk ==')':
                pair_check-=1
            if pair_check < 0:
                print("NO")
                break
        if pair_check > 0:
            print("NO")
        elif pair_check==0:
            print("YES")
    ## 숏코딩 풀이
    for _ in range(int(input())):
        b=input()
        while '()' in b:
            b=b.replace('()','')
        print("NO" if brk else "YES")

     

     

     

    문제 정의

    문제에서 입력으로 반복할 테스트 케이스 수 T가 주어지고, 다음 줄부터 T 줄 만큼 괄호 문자열이 한 줄씩 주어집니다. 모든 괄호의 쌍이 맞으면 YES를, 쌍이 맞지 않으면 NO를 출력합니다.

     

    예제 입력 및 출력

     

    일반 풀이와 숏코딩 풀이

    일반 풀이

    ## 일반 풀이
    T = int(input()) ## 테스트케이스
    for _ in range(T):
        brk_list=list(input()) ## 괄호 리스트
        pair_check=0
        for brk in brk_list:
            if brk == '(':
                pair_check+=1
            elif brk ==')':
                pair_check-=1
            if pair_check < 0:
                print("NO")
                break
        if pair_check > 0:
            print("NO")
        elif pair_check==0:
            print("YES")

    테스트 케이스를 정수로 T만큼 입력받고, for문으로 반복합니다. 각 반복에서, 괄호를 리스트 형태로 받아 brk_list에 저장합니다. 쌍이 맞는지 체크하는 변수 pair_check=0으로 초기화합니다. brk_list의 요소를 brk로 반복하며, '('로 시작하는 경우 pair_check+=1을 해주고, ')'로 끝나는 경우 pair_check-=1을 해줍니다. 만약, pair_check <0이라면 괄호 쌍에 맞지 않게 ')'가 한번 더 나온 경우입니다. 이런 경우 NO를 출력하고 break를 합니다. brk_list를 모두 반복하고, pair_check>0이라면, 괄호 쌍이 맞지 않게 '('가 더 많은 경우입니다. 역시 NO를 출력하고, pair_check가 0인 경우는 모든 괄호 쌍이 맞는 경우이므로, YES를 출력합니다.

     

    숏코딩 풀이

    ## 숏코딩 풀이
    for _ in range(int(input())):
        b=input()
        while '()' in b:
            b=b.replace('()','')
        print("NO" if brk else "YES")

    테스트 케이스를 T로 받지 않고, 바로 for 문 range안에 받아 반복합니다. 각 반복에서, 괄호 문자열을 b에 저장합니다. 이 숏코딩의 핵심은 b에 '()'가 존재하는 동안 계속 반복하며 '()'를 제외하는 부분입니다. 만약 괄호가 '(())()' 라면, 첫 while문에 b.replace('()', '')를 통해 b가 '(())()'에서 빨간 부분이 제외되어 '()'가 될 것입니다. 여전히 '()'가 b에 존재하므로, 다음 while 반복에서 '()'가 제외되어 b는 빈 문자열 ''이 됩니다. 빈 문자열은 False취급을 받으므로 print의 삼항 연산에서 YES가 출력됩니다.

     

    읽어주셔서 감사합니다.

    오늘도 유익하셨길 바랍니다. 

    다음에 더 유익하고 재미있는 포스팅으로 찾아오겠습니다.

     

    * 아래 깃허브에 해당 풀이를 정리해 두었습니다.

     

    GitHub - netsus/BaekJoon: Algorithm Problem solving

    Algorithm Problem solving. Contribute to netsus/BaekJoon development by creating an account on GitHub.

    github.com

     

    반응형

    댓글

    Designed by JB FACTORY