백준 9012번 바로가기

나의 풀이

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

  1. 예전에 창의력 수학 문제를 풀다가 비슷한 논리를 본 기억이 있다. 산 모양 그래프로 풀어내는 문제였다.
    • 고도 0에서 시작해서 고도 0으로 끝나는 산을 생각해보자. 이 산은 중간에 땅을 뚫고 고도가 0 미만으로 떨어지면 안된다.
    • 아래 그림에서 주황색처럼 중간에 중간에 땅을 뚫고 들어가거나 파란색이나 초록색처럼 마지막에 고도가 0이 아니면 안된다.
    • 코드에서도 마찬가지 논리로 score이 중간에 음수로 가는지, 끝에서 0인지를 체크하며 NO, YES을 출력했다.

(바람직한 산의 모양)

(바람직하지 못한 산의 모양)

  1. else에 그동안 알지 못했던 기능이 있었다. for문 안에서 중간에 break로 빠져나오는 경우가 없을 경우 else문 안을 실행한다는 간편한 기능!! 앞으로 애용할 것 같다.
  2. 고수의 풀이에서는 () 문자열을 반복해서 지워나가면서 최종적으로 빈 문자열 ‘‘이 되는지 확인하는 방식을 사용했다. (신박하네..ㅂㅇㅂ)