백준/solved.ac

# 1013 Contact

bright_code 2020. 10. 2. 11:46
728x90
반응형

# deque 이용해서 풀었는데 런타임 에러 남.. 

from collections import deque

def contact(spread): 

  while len(spread) > 0 : 

    if spread[0] == '0' :
      if spread[1] == '1' :
        spread.popleft()
        spread.popleft()
        
      else :
        print("NO") 
        return False 

    else :               # 1로 시작하는 경우 
      spread.popleft()   # 먼저 1 뺌 

      if len(spread) < 3 :  # 최소 1001 
        print("NO") 
        return False
      
      for i in range(2):   # 0 2개 빼기 
        if spread.popleft() != '0':
          print("NO") 
          return False

      # 여기 부터는 000~111 무조건 1로 끝나면 됨. 
      while len(spread) > 0 : 
        tmp = spread[0]

        if tmp == '1' : 
          if len(spread) == 1 or spread[1] == '0' : 
            spread.popleft()
            break  

        spread.popleft()    
      
      if tmp != '1' : 
        print("NO") 
        return False

  print("YES") 
  return True 

t = int(input())

data = []
for i in range(t):
  data.append( deque(input()) )

for i in range(t):
  contact(data[i])

 

# 정규 표현식으로 풀면 된다고 한다... 

-> 정규 표현식 공부하고 다시 도전! 

728x90
반응형