https://codeforces.com/contest/1504/problem/B
시간 1초, 메모리 256MB
input :
output :
조건 :
뒤에서 부터 동일하지 않은 부분 까지를 찾아서 뒤집고 뒤집으려 했다. 이렇게 할 경우 코드도 길어지고 시간 복잡도도 많이 필요하다. 다른 방법이 필요하다.
교체가 필요한 경우를 따져보자.
접두사 부분에서 현재 인덱스에 있는 문자가 다르다면 교체를 해야 한다. 그런데 현재 위치가 아니라 현재 위치 + 1이 다르다면? 현재 위치까지의 접두사를 뒤집어야 그 다음 +1 에서 뒤집을 떄 원래 모양을 얻을 수 있다.
이러한 경우를 생각해야 한다.
인덱스를 이렇게 볼 떄
이러한 형태를 유지한다면 교환을 해야 한다. 근데 이 때 교환을 할 수 있는 조건을 만족하지 않는다면? 만들 수 없는 것이다.
이를 boolean값을 사용해서 계산하자.,
import sys
t = int(sys.stdin.readline())
for _ in range(t):
n = int(sys.stdin.readline())
a = list(sys.stdin.readline().rstrip())
b = list(sys.stdin.readline().rstrip())
a.append('1')
b.append('1')
cnt, flag = 0, 0
for i in range(n):
cnt += (a[i] == '1') - (a[i] == '0')
if ((a[i] == b[i]) != (a[i + 1] == b[i + 1])) and cnt != 0:
flag = 1
break
print("NO" if flag else "YES")
맨 뒤에 동일한 값을 추가함으로써 계산을 훨씬 편하게 하도록 하자.