Go: package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

var scanner = bufio.NewScanner(os.Stdin)

func nextInt() (int, error) {
	s, _ := nextString()
	return strconv.Atoi(s)
}

func nextString() (string, bool) {
	succeeded := scanner.Scan()
	if succeeded {
		return scanner.Text(), succeeded
	}
	return "", succeeded
}

func printArr(arr []string) {
	fmt.Println(strings.TrimRight(fmt.Sprintf("%+v", arr)[1:], "]"))
}

func main() {
	scanner.Split(bufio.ScanWords)

	const maxCapacity = 512 * 1024
	buf := make([]byte, maxCapacity)
	scanner.Buffer(buf, maxCapacity)

	n, _ := nextInt()
	if n == 1 {
		fmt.Println(0)
		return
	}

	s, succeeded := nextString()
	if !succeeded {
		fmt.Errorf("Scan failed")
		return
	}
	nOX := 0
	i := 1
	for {
		if s[i] != s[i-1] {
			nOX++
			i++
		}
		i++
		if i >= n {
			break
		}
	}
	fmt.Println(nOX)
}

C++: #include <bits/stdc++.h>
using namespace std;

int main() {
    int n, ans = 0;
    string s;
    cin >> n >> s;
    for(int i=0;i<n-1;i++){
        if((s[i]=='O'&&s[i+1]=='X') || (s[i]=='X'&&s[i+1]=='O')){
            ans++;
            i++;
        }
    }
    cout << ans << endl;
    return 0;
}

C++: #include <bits/stdc++.h>
using namespace std;

int main(){

    int n, count=0; cin >> n;
    string s; cin >> s;

    for (int i=0;i<n;i++){

        if (s[i]=='O' && s[i+1]=='X' || s[i]=='X' && s[i+1]=='O'){
            count += 1;
            i += 1;
        }

    }

    cout << count << endl;
}

C++: #include <iostream>
#include <string>
using namespace std;
int main() {
	int n = 0; string s; cin >> s >> s;
	for (int i = 0; i < s.size(); i++) {
		if (i != s.size() - 1 && s[i] != s[i + 1]) {
			i++; n++;
		}
	}
	cout << n << endl;
}

C++: #include<bits/stdc++.h>
using namespace std;
int main() {
    char arr[1000000];
    int n;
    cin >> n;
    for (int i = 0; i < n; i++) { cin >> arr[i]; }

    int i = 0;
    int ans = 0;
    while(i < n - 1) {
        if ((arr[i] == 'O' && arr[i + 1] == 'X') || (arr[i] == 'X' && arr[i + 1] == 'O')) {
            ans++;
            i += 2;
        } else {
            i++;
        }
    }
    cout << ans << endl;
    return 0;
}

C++: // #pragma GCC target("avx")  // CPU 処理並列化
// #pragma GCC optimize("O3")  // CPU 処理並列化
// #pragma GCC optimize("unroll-loops")  // 条件処理の呼び出しを減らす
// #define BEGIN_STACK_EXTEND(size) void * stack_extend_memory_ = malloc(size);void * stack_extend_origin_memory_;char * stack_extend_dummy_memory_ = (char*)alloca((1+(int)(((long long)stack_extend_memory_)&127))*16);*stack_extend_dummy_memory_ = 0;asm volatile("mov %%rsp, %%rbx\nmov %%rax, %%rsp":"=b"(stack_extend_origin_memory_):"a"((char*)stack_extend_memory_+(size)-1024));
// #define END_STACK_EXTEND asm volatile("mov %%rax, %%rsp"::"a"(stack_extend_origin_memory_));free(stack_extend_memory_);

#include<stdio.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<deque>
#include<stack>
#include<string>
#include<string.h>
#include<vector>
#include<set>
#include<map>
#include<bitset>
#include<stdlib.h>
#include<cassert>
#include<time.h>
#include<bitset>
#include<numeric>
#include<unordered_set>
#include<unordered_map>
#include<complex>
using namespace std;
const long long mod=1000000007;
const long long inf=mod*mod;
const long long d2=(mod+1)/2;
const long double EPS=1e-20;
const double INF=1e+10;
const double PI=acos(-1.0);
const int C_SIZE = 3100000;
const int UF_SIZE = 3100000;
namespace{
	long long fact[C_SIZE];
	long long finv[C_SIZE];
	long long inv[C_SIZE];
	long long Comb(int a,int b){
	 	if(a<b||b<0)return 0;
	 	return fact[a]*finv[b]%mod*finv[a-b]%mod;
	}
	void init_C(int n){
		fact[0]=finv[0]=inv[1]=1;
		for(int i=2;i<n;i++){
			inv[i]=(mod-(mod/i)*inv[mod%i]%mod)%mod;
		}
		for(int i=1;i<n;i++){
			fact[i]=fact[i-1]*i%mod;
			finv[i]=finv[i-1]*inv[i]%mod;
		}
	}
	long long pw(long long a,long long b){
		if(a<0LL)return 0;
		if(b<0LL)return 0;
		long long ret=1;
		while(b){
			if(b%2)ret=ret*a%mod;
			a=a*a%mod;
			b/=2;
		}
		return ret;
	}
	long long pw_mod(long long a,long long b,long long M){
		if(a<0LL)return 0;
		if(b<0LL)return 0;
		long long ret=1;
		while(b){
			if(b%2)ret=ret*a%M;
			a=a*a%M;
			b/=2;
		}
		return ret;
	}
	int pw_mod_int(int a,int b,int M){
		if(a<0)return 0;
		if(b<0)return 0;
		int ret=1;
		while(b){
			if(b%2)ret=(long long)ret*a%M;
			a=(long long)a*a%M;
			b/=2;
		}
		return ret;
	}
	int ABS(int a){return max(a,-a);}
	long long ABS(long long a){return max(a,-a);}
	double ABS(double a){return max(a,-a);}
	int sig(double r) { return (r < -EPS) ? -1 : (r > +EPS) ? +1 : 0; }
	int UF[UF_SIZE];
	void init_UF(int n){
		for(int i=0;i<n;i++)UF[i]=-1;
	}
	int FIND(int a){
		if(UF[a]<0)return a;
		return UF[a]=FIND(UF[a]);
	}
	void UNION(int a,int b){
		a=FIND(a);b=FIND(b);if(a==b)return;
		if(UF[a]>UF[b])swap(a,b);
		UF[a]+=UF[b];UF[b]=a;
	}
}
// ここから編集しろ
char in[110000];
int main(){
	int a;scanf("%d",&a);
	scanf("%s",in);
	int ret=0;
	for(int i=0;i<a-1;i++){
		if(in[i]=='O'&&in[i+1]=='X'){
			ret++;i++;
		}else if(in[i]=='X'&&in[i+1]=='O'){
			ret++;i++;
		}
	}
	printf("%d\n",ret);
}

C++: #include <iostream>

using namespace std;

int main(void){
    int num;
    cin >> num;
    char words[num];
    cin >> words;
    int oxcount = 0;
    
    for(int i = 0; i < num - 1; i++){
        if(words[i] != words[i + 1]){
            oxcount += 1;
            i += 1;
        }
    }
    cout << oxcount << '\n';
}

C++: #include <bits/stdc++.h>

using namespace std;

int main() {
	int n, cnt;
	string s;

	cnt = 0;
	cin >> n >> s;
	for (int i = 1; i < n; ++i) {
		if (s[i] != s[i - 1]) {
			++cnt;
			++i;
		}
	}
	cout << cnt << endl;

	return 0;
}

C++: #include <iostream>
using namespace std;

int main(void){
  string st;
  int n,ans=0;
  
  cin >> n >> st;
  for (int i=0; i<n-1; i++){
    if (st[i]!=st[i+1]){
      ans++;
      i++;
    }
  }
  cout << ans << endl;
    
  return 0;
}

C++: #include <iostream>
#include <string>
using namespace std;

int main() {
	int N;
	cin >> N;
	string S;
	cin >> S;

	int ans = 0;
	for(int i = 1; i < N; i++)
		if (S[i-1] != 'z' && S[i] != S[i-1]) {
			S[i] = 'z';
			S[i-1] = 'z';
			ans++;
		}

	cout << ans << endl;
}

C++: #include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i, n) for(int i = 0; i < (int)(n); i++)
const double PI = acos(-1);
const ll MOD = 1000000007;
using Graph = vector<vector<int>>;

int main() {
  int N; cin >> N;
  string S; cin >> S;

  int i = 1;
  int count = 0;
  while (i < N) {
    if (S[i] != S[i-1]) {
      count++;
      i += 2;
    } else i++;
  }

  cout << count << endl;
}

C++: // 2019/07/03 Tazoe

#include <iostream>
using namespace std;

int main()
{
	int N;
	cin >> N;

	int cnt = 0;
	int sta = 0;

	for(int i=0; i<N; i++){
		char C;
		cin >> C;

		if(sta==1){
			if(C=='O'){
				;
			}
			else{
				cnt++;
				sta = 0;
			}
		}
		else if(sta==2){
			if(C=='O'){
				cnt++;
				sta = 0;
			}
			else{
				;
			}
		}
		else{
			if(C=='O'){
				sta = 1;
			}
			else{
				sta = 2;
			}
		}
	}

	cout << cnt << endl;

	return 0;
}

C++: #include <iostream>
#include <algorithm>
using namespace std;

int main(){
    int N;
    string S;
    cin >> N;
    cin >> S;
    int i = 0, Oflag = 0, Xflag = 0, OX = 0;
    while (i < N-1){
        if (S[i] == 'O'){
            Oflag = 1;
            Xflag = 0;
            if (S[i+1] == 'O'){
                i++;
            } else {
                OX++;
                i += 2;
            }
        } else {
            Xflag = 1;
            Oflag = 0;
            if (S[i+1] == 'O'){
                OX++;
                i += 2;
            } else {
                i++;
            }
        }
    }
    cout << OX << endl;
}