Go: package main

import (
	"fmt"
	"strings"
)

func main() {
	var n int
	var s string
	_, _ = fmt.Scan(&n)
	_, _ = fmt.Scan(&s)
	fmt.Println(calc(s))
}

func calc(s string) int {
	sum := 0
	ss := strings.Split(s,"")
	bf := 0
	for _, v := range ss{
		if bf == 0 {
			bf = cnv(v)
		} else if bf != cnv(v) {
			sum++
			bf = 0
		}
	}
	return sum
}

func cnv(s string) int {
	switch s {
	case "O":
		return 1
	case "X":
		return 2
	}
	return 0
}

C++: #include <bits/stdc++.h>
#define int long long
#define endl '\n'
#define FOR(i, a, n) for (int i = (a); i < (n); ++i)
#define REP(i, n) FOR(i, 0, n)
using namespace std;

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int N;
    string S;
    cin >> N >> S;
    int i = 0, cnt = 0;
    while (i < N) {
        string T = S.substr(i, 2);
        if (T == "OX" || T == "XO") {
            ++cnt;
            i += 2;
        } else {
            ++i;
        }
    }
    cout << cnt << endl;
}

C++: #include <cstdlib>
#include <iostream>

using namespace std;

enum stampState{
    EMPTY = 0,
    O = 1,
    X = 2,
};


int main(){
    int n;
    string s;
    bool isO[100000];
    int OXStamp = 0;
    stampState beforeStamp = EMPTY;

    cin >> n;
    cin >> s;

    for(int i=0; i<n; i++){
        if(s[i] == 'O'){
            isO[i] = true;
        }else{
            isO[i] = false;
        }
    }

    for(int i=0; i<n; i++){
        switch(beforeStamp){
            case EMPTY :
                if(isO[i]){
                    beforeStamp = O;
                }else{
                    beforeStamp = X;
                }
                break;
            case O :
                //cout << "Oyo" << endl;
                if(!isO[i]){
                    OXStamp++;
                    beforeStamp = EMPTY;
                }
                break;
            case X :
                //cout << "Xyo" << endl;
                if(isO[i]){
                    OXStamp++;
                    beforeStamp = EMPTY;
                }
                break;
        }
    }
    cout << OXStamp << endl;

    return 0;
}

C++: #include<bits/stdc++.h>
typedef long long int ll;
typedef unsigned long long int ull;
#define BIG_NUM 2000000000
#define HUGE_NUM 99999999999999999
#define MOD 1000000007
#define EPS 0.000000001
using namespace std;

#define NUM 100005

int N;
char buf[NUM];

int main(){

	scanf("%d",&N);
	scanf("%s",buf);


	int ans = 0;

	for(int i = 0; i+1 < N;){

		if(buf[i] == 'O' && buf[i+1] == 'X'){
			ans++;
			i += 2;
		}else if(buf[i] == 'X' && buf[i+1] == 'O'){
			ans++;
			i += 2;
		}else{
			i++;
		}
	}

	printf("%d\n",ans);

	return 0;
}

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

int n;
string S;

int main(void)
{
    cin >> n;
    cin >> S;

    int count = 0;
    for(int i=1;i<n;i++){
        if(S[i-1] != S[i]){
            count++;
            i++;
        }
    }

    cout << count << endl;
}

C++: #include <stdio.h>
#include <iostream>
#include <string>

using namespace std;

int larger(int x, int y){
	if(x > y){
		return x;
	}
	else{
		return y;
	}
}

int main(){
	int N;
	string S;
	cin >> N >> S;
	int memo[N+1];
	for(int i = 0; i < N + 1; i++){
		memo[i] = 0;
	}
	for(int i = 1; i < N; i++){
		if(S[i] != S[i-1]){
			memo[i+1] = larger(memo[i-1]+1, memo[i]);
		}
		else{
			memo[i+1] = memo[i];
		}
	}
	cout << memo[N] << "\n";
}

C++: //0654 菅野美怜　未完成 //
#include<iostream>
#include<queue>
using namespace std;
int main(void){
  int N;
  int count = 0;
  char x;
  cin >> N;
  queue<char> data;
  
  for (int i = 0; i < N;i++){
    cin >> x;
    data.push(x);
  }

  //set<string> data2 = data;
  while(true)
  {
    if(data.front()=='O'){
      data.pop();
      if(data.front()=='X'){
        data.pop();
        count++;
      }
    }
      if(data.front()=='X'){
        data.pop();
        if(data.front()=='O'){
          data.pop();
          count++;
        }
      }
      if(data.size()==0){
      break;
    }
    
  }
  cout << count << 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 = 0; i < n - 1; ++i) {
		if (s[i] != s[i + 1]) { ans++; i++; }
	}
	cout << ans << endl;

	return 0;
}

C++: #include <iostream>
#include <string>

void solve() {
    int n;
    std::string s;
    std::cin >> n >> s;

    int i = 0, ans = 0;
    while (i + 1 < n) {
        if (s[i] != s[i + 1]) {
            ++ans;
            i += 2;
        } else {
            i += 1;
        }
    }

    std::cout << ans << "\n";
}

int main() {
    std::cin.tie(nullptr);
    std::ios::sync_with_stdio(false);

    solve();

    return 0;
}

C++: /*JOI 君はマルスタンプ，バツスタンプ，マルバツスタンプの3種類のスタンプをそれぞれ 0 個以上持っている．これらはマルやバツのマークを紙に印字することができるスタンプである．

   マルスタンプを使うとマルが 1 つ印字され，バツスタンプを使うとバツが 1 つ印字される．マルバツスタンプを使うとマルとバツが横一列に 1 つずつ印字され，スタンプの向きを変えることで，マルの右にバツが来るようにも，バツの右にマルが来るようにも印字できる．

   JOI 君は，持っているスタンプをそれぞれちょうど 1 回ずつ適当な順番で使い，紙に横一列にマルとバツを印字した．印字されたマルとバツの列は文字列 S で表される．S は O と X から構成された長さ N の文字列であり，Si= O ならば JOI 君が印字したマークのうち左から i 番目のものがマルであることを表し，Si= X ならばそれがバツであることを表す (1≦i≦N)．*/

#include <iostream>
#include <string>
using namespace std;
int main(int argc, char const *argv[]) {
        int length, counter = 0;

        string ox;
        cin >> length >> ox;
        for(int i = 0; i < length; i++) {
                if(ox[i] == 'O' && ox[i+1] == 'X') {
                        counter++;
                        i++;
                }else if(ox[i] == 'X' && ox[i+1] == 'O') {
                        counter++;
                        i++;
                }
        }
        cout << counter << endl;
        return 0;
}

C++: #include <bits/stdc++.h>
using namespace std;
int main(){
    int N;
    int ans=0;
    string S;
    cin >> N;
    cin >> S;
    for(int i=0; i<N ; i++){
        if(S[i]=='O' && S[i+1]=='X' || S[i]=='X' && S[i+1]=='O'){
            ans++;
            i++;
        }
    }
    cout << ans << endl;
}

C++: #include<iostream>
#include<string>
#include<algorithm>	
#include<cmath>
using namespace std;
int main() {
	int n, b = 0, sum = 0, num = 0, ans = 0;
	char a; cin >> n;
	for(int h = 0; h < n; h++){
		cin >> a;
		if (a == 'O' && num == 1) {
			ans++; b++;
		}
		if (a == 'X' && sum == 1) {
			ans++; b++;
		}
		sum = 0; num = 0;
		if (a == 'O' && b == 0) {
			sum++;
		}
		if (a == 'X' && b == 0) {
			num++;
		}
		b = 0;
	}
	cout << ans << endl;
	cin >> n;
}

C++: #include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<b;i++)
#define rrep(i,a,b) for(int i=a;i>=b;i--)
#define fore(i,a) for(auto &i:a)
#define all(x) (x).begin(),(x).end()
//#pragma GCC optimize ("-O3")
using namespace std; void _main(); int main() { cin.tie(0); ios::sync_with_stdio(false); _main(); }
typedef long long ll; const int inf = INT_MAX / 2; const ll infl = 1LL << 60;
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; }
//---------------------------------------------------------------------------------------------------
/*---------------------------------------------------------------------------------------------------
　　　　　　　　　　　 ∧＿∧
　　　　　 ∧＿∧ 　（´<_｀ ）　 Welcome to My Coding Space!
　　　　 （ ´_ゝ`）　/　 ⌒i     @hamayanhamayan
　　　　／　　　＼　 　  |　|
　　　 /　　 /￣￣￣￣/　　|
　 ＿_(__ﾆつ/　    ＿/ .| .|＿＿＿＿
　 　　　＼/＿＿＿＿/　（u　⊃
---------------------------------------------------------------------------------------------------*/














int N; string S;
int dp[101010];
//---------------------------------------------------------------------------------------------------
void _main() {
	cin >> N >> S;
	rep(i, 0, N) {
		chmax(dp[i + 1], dp[i]);
		if (i + 1 < N and S[i] != S[i + 1]) chmax(dp[i + 2], dp[i] + 1);
	}
	cout << dp[N] << endl;
}