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