백준 4949번 바로가기

생각보다 간단하게 풀린 문제였다. 다만, 문제조건을 잘못 봐서 초기에 조금 헤맸다. n 이상인지 이하인지에 주의하고 범위설정에 유의해야겠다. 이 문제의 경우 1,000,000이 input으로 주어질 경우 output이 없는 문제가 발생하는데 범위를 1,005,000까지 여유있게 잡아주면 문제 없이 실행된다. 그외에는 팰린드롬과 소수판별 알고리즘만 짤 수 있다면 쉽게 해결 가능한 문제였다.

while True :
    a = input()
    temp = []

    if a == "." :
        break

    for i in a :
        if i == '[' or i == '(' :
            temp.append(i)
        elif i == ']' :
            if len(temp) != 0 and temp[-1] == '[' :
                temp.pop()
            else : 
                temp.append(']')
                break
        elif i == ')' :
            if len(temp) != 0 and temp[-1] == '(' :
                temp.pop()
            else :
                temp.append(')')
                break
    if len(temp) == 0 :
        print('yes')
    else :
        print('no')

고수의 풀이

while(l:=input())!='.':
 s=''
 for i in l:
  if i in'()[]':s=(s+i).replace('()','').replace('[]','')
 print('yneos'[s>''::2])

CODE REVIEW

  1. 백준 9012번문제와 유사하면서도 따로 신경써줘야 할 것이 많은 문제. 처음에는 re이용해서 특수문자만 추출했는데, 자꾸 이해할 수 없게 에러나길래 그냥 input()그대로 사용하였다.
  2. 고수의 풀이에서 if i in '()[]':이후에 .replace('()','').replace('[]','')이 신박했다. 이것저것 따질 필요 없이 한큐로 해결 가능하다니…?!