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;
typedef long long ll;

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

C++: #include <iostream>
using namespace std;
int main(void){
    long int N, i, COUNT=0;
    char S[100000]={};
    
    cin >> N;
    for(i=0; i<N; i++){
        cin >> S[i];
    }
    
    for(i=0; i<N-1; i++){
        if(S[i] != S[i+1]){
            COUNT++;
            i++;
        }
    }
    cout << COUNT << endl;
    return 0;
}

C++: #include<vector>
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include <iostream>
#include <algorithm>
#include <map>
#include <cmath>
#include<queue>
#include <sstream>

#define INF 100000000000000
using namespace std;
typedef long long llong;

//int isalpha(char ch): ch がアルファベットなら true を返す
//int isdigit(char ch): ch が数字なら true を返す
//int islower(char ch): ch が小文字なら true を返す
//int isupper(char ch): ch が大文字なら true を返す
//int tolower(char ch): ch の小文字を返す
//int toupper(char ch): ch の大文字を返す

//string型
//size()	文字数を返す
//Insert()	（指定した場所に）文字・文字列を挿入する
//erase()	（指定した場所の）文字・文字列を削除する
//clear()	すべての文字を削除する
//substr()	文字列の（指定した）部分文字列を返す
//replace()	（指定した）部分文字列を新しい文字列に置換する
//c_str()変換
//文字列の比較は、<=や==などを使え
//replace関数を使い、簡単に文字列を置換
//リバース関数：reverse(str.begin(), str.end());
//map<type, type> dict;で宣言
//グラフ理論用変数
//vector<vector<llong> > graph(N);

//ソート
//降順sort(v.begin(), v.end(), std::greater<Type>());

//大文字から小文字へんかん
//w[i] = w[i]-'A'+'a';

//vector
//assignメソッド　引数：サイズ、値
//与えられたサイズと値でvectorを初期化する

//queueクラス
//find()次に取り出す値の表示をする。
//pop()値を取り出す。戻り値はなし
//push()キューに値をプッシュする

//priority_queueクラス

//切り上げ
//ceil
//floor

int main(){
    llong N;
    string S;
    cin >> N;
    cin >> S;
    llong idx=0;
    llong ans=0;
    //greedyアルゴリズム
    while(idx<S.size()){
        if( idx<S.size()-1 && ((S[idx]=='O'&&S[idx+1]=='X') || (S[idx]=='X'&&S[idx+1]=='O'))){
            ans++;
            idx = idx + 2;
            continue;
        }
        idx = idx+1;
    }
    cout << ans << endl;
    return 0;
}

C++: #include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0; i<(n); i++)
#define FOR(i,x,n) for(int i=x; i<(n); i++)
#define ALL(n) begin(n),end(n)
#define MOD 1000000007
#define INF 1e9
#define INFL 1e12
 
typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;
template<class T>void pr(T x){cout << x << endl;}
template<class T>void prvec(vector<T>& a){rep(i, a.size()-1){cout << a[i] << " ";} cout << a[a.size()-1] << endl;}
template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }
 
int main()
{
    int n; cin >> n;
    string s; cin >> s;
    int ans = 0;
    for(int i=0; i<s.length()-1;){
        if(s[i]=='O'){
            if(s[i+1]=='X') {
                ans++;
                i++;
            }
            i++;
            continue;
        }
        if(s[i]=='X'){
            if(s[i+1]=='O') {
                ans++;
                i++;
            }
            i++;
            continue;
        }

    }
    pr(ans);
    return 0;
}

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

int main() {
    int N; string S; cin >> N >> S;
    int res = 0; int tmp = 0;
    char prev = '?';
    for (int i = 0; i < N; ++i) {
        if (S[i] == prev) {
            res += tmp/2;
            tmp = 1;
        }
        else ++tmp;
        prev = S[i];
    }
    res += tmp/2;
    cout << res << endl;
}

C++: #include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main(void){
    
    int N, ans=0;
    string S;
    
    cin >> N >> S;
    
    for(int i = 0; i < S.length() ;){
        if(S[i] == 'O'){
            if(S[i+1] == 'X'){ 
            ans++;
            i+=2;
            }
            else i++;
        }
        else if(S[i] == 'X'){
            if(S[i+1] == 'O'){ 
            ans++;
            i+=2;
            }
            else i++;
        }
    }
    
    std::cout << ans << std::endl;
    
    
}

C++: #include<iostream>
#include<algorithm>
#include<vector>
#include<stdio.h>
#include<math.h>
using namespace std;
int main(){
    string str;
    int n,s=0;
    cin>>n>>str;
    for(int i=0;i<n;i++){
        if(str[i]!=str[i+1]&&i+1!=n){
            s++;
            i++;
        }
    }
    cout<<s<<endl;
}

C++: #include<iostream>
#include<string>
#include<algorithm>
#include<math.h>
#include<queue>
#include<set>
#include<map>
#include<random>
#include<functional>
#include<utility>

typedef long long ll;

#define rep(i,n) for(int i=0; i<n; i++)
#define pb push_back
#define P pair<int, int>
#define PLI pair<ll, int>
#define PLL pair<ll, ll>
#define VI vector<int>
#define VII vector<VI>

using namespace std;


int N;
string s;
int main() {
	cin >> N >> s;
	int ans = 0;
	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 <iostream>
using namespace std;

int main(void) {
    int N;cin>>N;
    string S;cin>>S;
    int i = 0;
    int result = 0;
    if (N == 1) {
        cout << 0 << endl;
        return 0;
    }
    while (i <= N - 2) {
        if (S.size() <= 1) break;
        string tmp = S.substr(i, 2);
        if (tmp == "OX" || tmp == "XO") {
            result++;
            i += 2;
        } else {
            i++;
        }
    }
    cout << result << endl;
    return 0;
}

C++: #include <bits/stdc++.h>
using ll = long long;
using namespace std;
#define _overload3(_1, _2, _3, name, ...) name
#define _rep(i, n) repi(i, 0, n)
#define repi(i, a, b) for(int i = int(a); i < int(b); ++i)
#define rep(...) _overload3(__VA_ARGS__, repi, _rep, )(__VA_ARGS__)
const long long INFLL = 1LL << 60;
const int INFINT = 1 << 30;
const long long MOD = 1e9 + 7;

template <class T> void vecout(T V) {
    auto t = V.begin();
    while(t != V.end()) {
        cout << *t++;
        if(t != V.end()) cout << " ";
    }
    cout << endl;
};

int main() {
    int n, t = 0;
    string S;
    cin >> n >> S;
    char p = S.at(0);
    rep(i, 1, n) {
        if(S.at(i) != p) {
            t++;
            if(i < S.size() - 1) p = S.at(++i);
        } else {
            p = S.at(i);
        };
    }
    cout << t << endl;
}

C++: #include<bits/stdc++.h>
#include<algorithm>
using namespace std;
int main(){
  int a,b,c,q=0,w=1;
  char d[10000000]={};
  cin>>a;
  cin>>d;
  for(int i=0;i<a;i++){
    if(d[i+1]==0){
      w=0;
    }
    if(d[i]!=d[i+1]&&w==1){
       i++;
       q++;
    }
  }
  cout<<q<<"\n";
}

C++: #include<iostream>
using namespace std;
int main() {
	int n;
	int i = 0;
	int x = 0;;
	int a = 0, b = 0, c = 0;
	int f = 0;

	char s[100000];

	cin >> n >> s;
	while (1) {
		if (i >= n)break;
		if (s[i] != s[i + 1]&&s[i+1]!='\0') {
				x++;
				i++;
		}
		i++;
	}
	cout << x << endl;
}