
경우의 수는 총 4가지만 존재함
1) 레드를 모두 왼쪽으로 옮기기
2) 레드를 모두 오른쪽으로 옮기기
3) 블루를 모두 왼쪽으로 옮기기
4) 블루를 모두 오른쪽으로 옮기기
또한, 각 경우의 이동 횟수는 (현재 컬러의 전체 갯수) - (현재 컬러의 현재 방향의 끝에 존재하는 현재 컬러 덩어리 갯수) 로 계산할 수 있음
n = int(input())
str = input()
min_move = 999999
colors = ['R', 'B']
# 경우의 수: R을 왼쪽으로 모두 옮기기, R을 오른쪽으로, B를 왼쪽으로, B를 오른쪽으로
# R, B 순으로 반복
for i in range(2):
# 1) 해당 컬러를 왼쪽으로 옮기기
if str[0] == colors[i]: # 맨 왼쪽이 해당 컬러라면
# 맨 왼쪽 해당 컬러 덩어리 카운트
r_count = 1
idx = 1
# 인덱스 범위 주의!
while 0 <= idx < n and str[idx] == colors[i]:
r_count += 1
idx += 1
move = str.count(colors[i]) - r_count
min_move = min(min_move, move)
else: # 맨 왼쪽이 해당 컬러가 아니라면
move = str.count(colors[i])
min_move = min(min_move, move)
# 2) 해당 컬러를 오른쪽으로 옮기기
if str[n - 1] == colors[i]: # 맨 오른쪽이 해당 컬러라면
# 맨 오른쪽 해당 컬러 덩어리 카운트
r_count = 1
idx = n - 2
# 인덱스 범위 체크
while 0 <= idx < n and str[idx] == colors[i]:
r_count += 1
idx -= 1
move = str.count(colors[i]) - r_count
min_move = min(min_move, move)
else: # 맨 오른쪽이 해당 컬러가 아니라면
move = str.count(colors[i])
min_move = min(min_move, move)
print(min_move)