이번 문제는 말을 뒤집거나 말끼리의 위치를 바꿔서 원하는 순서로 정렬시키는데에 필요한 작업 횟수를 출력하는 문제였다. 말을 원하고자 하는 형태로 바꾸는데에 두가지 작업이 존재해서 처음에는 방향을 잡기 어려웠지만 어느정도 패턴을 파악하였고 그 패턴을 발전시켜서 해결하였다.
초기에 생각한 패턴은 W->B를 세는 bcnt와 B->W를 세는 wcnt를 두고 말들을 확인하며 bcnt와 wcnt를 증가시키고 난 뒤에 bcnt+wcnt-(더 작은 cnt)가 정답을 구할 수 있는 패턴이라고 생각하였다. 실제로도 이 연산은 정답을 출력해주었다. 그러나 이 패턴을 자세히 보니 결국에 정답은 bcnt와 wcnt중 더 큰 값이 된다는 사실을 깨달았다.
WWBB, BBWB 문제를 예시로 확인해보면 다음과 같다.
WWBB -> BWBB (bcnt=1) -> BBBB (bcnt=2) -> BBWB (wcnt=1)
bcnt=2, wcnt=1
모두 뒤집은 경우라면 bcnt+wcnt의 결과인 3이겠지만 더 작은 wcnt가 1이므로 B,W 1개씩은 서로 자리를 바꿀 수 있는 경우가 된다. 두번의 뒤집기가 한번의 바꾸기로 대체되기 때문에 이 문제의 경우 (bcnt+wcnt)-wcnt라고 생각을 하였고 이 식은 결국 bcnt가 되므로 최종 결과는 max(bcnt, wcnt)라고 할 수 있다.
코드는 다음과 같이 작성하였다.
t=int(input())
for i in range(t):
n=int(input())
o=[]
wcnt=0
bcnt=0
for j in range(2):
o.append(str(input()))
for j in range(n):
if o[0][j]=='W' and o[1][j]=='B':
bcnt+=1
elif o[0][j]=='B' and o[1][j]=='W':
wcnt+=1
print(max(bcnt, wcnt))