Well I would make a different approach.
A controller object (not a sprite, just an invisible object that will hold some necessary scripts as in editor game logic interfaces) should have a script that will get all country GameObjects and shuffle them randomly in a list and divide between colors of how many players there are (like first half to a player 1, second...)
To shuffle a list:
List<CountryScript> countryList = new List<CountryScript>();
countryList.AddRange(GetComponents<CountryScript>());
List<CountryScript> shuffledCountryList = new List<CountryScript>();
while(countryList.Count > 0) {
CountryScript c = countryList[Random.Range(0, countryList.Count)];
shuffledCountryList.Add(c);
countryList.Remove(c);
}
At the end of this you have an empty countryList and full shuffledCountryList. Any devision you can do in foreach loop like:
int playerCount = 2;
int maxNum = shuffledCountryList.Count / playerCount;
//It can be 2 or whatever you'll have it later
for(int i = 0; i < shuffledCountryList.Count; i++) {
shuffledCountryList[i].SetPlayer(i/maxNum);
}
The CountryScript should have a public void SetPlayer(int Num) {} method that will color to a player specific color by an int Num value. Will you store this list on that Controller script in a property to be able to tweak it in editor or have it hardcoded in CountryScript is your choice. I'd go first way, since this way you can easily add more players + edit without coding. Or like Programmer wrote:
(Num == 0) ? Color.red : (Num == 1) Color.green : Color.blue;
Hope this helped you.