이분 탐색 문제이다.
항상 종이를 절반씩 접는다고 할 때, 제시된 문자열로 종이를 접을 수 있는지 확인하는 문제이다.
종이를 절반씩 접게 되면, 항상 접은 부분을 중심으로 양쪽에는 반대로 접힌 흔적이 남게 된다.
ex) 1000110 인 경우
011
100
→ 1 0
이와 같이 종이를 절반씩 접어가면서, 좌우 값이 같지 않은지 확인하다.
import sys
read = sys.stdin.readline
t = int(read())
def verify(start, end):
if start >= end:
return True
left = start
right = end
# 이분 탐색
while left < right:
if paper[left] == paper[right]:
return False
left += 1
right -= 1
return verify(start, right - 1)
for _ in range(t):
paper = list(map(int, read().rstrip()))
if verify(0, len(paper) - 1):
print("YES")
else:
print("NO")