#include <bits/stdc++.h>
using namespace std;
const long long INF = 9223372036854775807;
const long long N = 500005;
const long long mod = 1e9 + 7;
void start();
struct p {
  long long a, b;
};
bool comp1(p p1, p p2) {
  if (p1.a < p2.a) {
    return true;
  }
  if (p1.a == p2.a) {
    return (p1.b < p2.b);
  }
};
struct CompareHeight {
  bool operator()(struct p const& p1, struct p const& p2) {
    return p1.a < p2.a;
  }
};
long long vis[N], weight[N];
long long a[N], ans;
void dfs(long long node, long long target, long long m,
         vector<pair<long long, long long> > adj[]) {
  vis[node] = 1;
  for (long long i = 0; i <= adj[node].size() - 1; i++) {
    long long child = adj[node][i].first;
    long long w = adj[node][i].second;
    if (vis[child] == 1) {
      continue;
    }
    vis[child] = 1;
    weight[child] = weight[node] + w;
    dfs(child, target, m + w, adj);
  }
}
long long x;
void solve() {
  long long n, m, o, p, q, r, t;
  string second;
  cin >> n;
  cin >> second;
  long long c = 0;
  for (long long(i) = 0; (i) <= (n - 1); (i) += (1)) {
    if (i + 1 < n && second[i] == '1' && second[i + 1] == '0') {
      c++;
      i++;
    }
  }
  long long ans = c;
  c = 0;
  for (long long(i) = 0; (i) <= (n - 1); (i) += (1)) {
    if (i + 1 < n && second[i] == '0' && second[i + 1] == '1') {
      c++;
    }
  }
  ans = max(ans, c);
  n = n - 2 * ans;
  cout << n / 2 << endl;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  start();
  long long query;
  cin >> query;
  while (query--) {
    x++;
    solve();
  }
}
void start() {}
