BOJ

백준 파이썬 9012 괄호

Coding_SJ 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문때문에 복잡도면에서 손해가 된다. (ㅠㅠ)