ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 파이썬 9012 괄호
    BOJ 2020. 3. 25. 19:31

     

     

     

     

     

     

     

     

     

    내 풀이

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    = int(input())
     
    while n > 0:
        
        n -= 1
        a = input()
     
        if a.count('('!= a.count(')'or a[0!= '(' or a[-1!= ')':
            print('NO')
     
        else:
            for i in range(len(a)):
                if a[0:i].count('('<  a[0:i].count(')'):
                    print('NO')
                    break
                if i == len(a)-1:
                    print('YES')
     
    cs

    스택 태그로 분류된 문제인데, 스택써야되는 아이디어가 안떠올라서

     

    또 그냥 문제를 있는 그대로 풀었다. 매우 비효율적으로..

     

    (를 +1로, )를 -1로 치환해서 생각해야 되는데 그런 생각이 안 떠오른다..

    사실상 틀린 풀이다.

     

     

    더 출제의도에 가깝게 다시 푼 풀이

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    = int(input())
    while n > 0:
        n -= 1
        a = input()
        c = 0
        for i in range(len(a)):
            if a[i] == '(':
                c += 1
                        
            else:
                c -= 1
                if c<0:
                    print('NO')
                    break
        
            if i == len(a) - 1:
                if c == 0:
                    print('YES')
                else:
                    print('NO')
    cs

    그런데 이 풀이 또한,

    마지막의 if문때문에 복잡도면에서 손해가 된다. (ㅠㅠ)

    댓글

Designed by Tistory.