나의 풀이
for _ in range(int(input())):
bracket = list(input())
score = 0
for i in bracket:
if score < 0:
print('NO')
break
else:
if i == '(':
score += 1
else:
score -= 1
else:
if score != 0:
print('NO')
else:
print('YES')
고수의 풀이
for _ in range(int(input())):
b=input()
while '()' in b:
b=b.replace('()','')
print("YES" if b='' else "NO")
CODE REVIEW
- 예전에 창의력 수학 문제를 풀다가 비슷한 논리를 본 기억이 있다.
산 모양 그래프
로 풀어내는 문제였다.- 고도 0에서 시작해서 고도 0으로 끝나는 산을 생각해보자. 이 산은 중간에 땅을 뚫고 고도가 0 미만으로 떨어지면 안된다.
- 아래 그림에서
주황색
처럼 중간에 중간에 땅을 뚫고 들어가거나파란색
이나초록색
처럼 마지막에 고도가 0이 아니면 안된다. - 코드에서도 마찬가지 논리로 score이 중간에 음수로 가는지, 끝에서 0인지를 체크하며 NO, YES을 출력했다.
(바람직한 산의 모양)
(바람직하지 못한 산의 모양)
-
else
에 그동안 알지 못했던 기능이 있었다. for문 안에서 중간에break
로 빠져나오는 경우가 없을 경우else
문 안을 실행한다는 간편한 기능!! 앞으로 애용할 것 같다. -
고수의 풀이에서는
()
문자열을 반복해서 지워나가면서 최종적으로 빈 문자열 ‘‘이 되는지 확인하는 방식을 사용했다. (신박하네..ㅂㅇㅂ)