# Leetcode 2103: Rings and Rods

--

In this problem, we are given a list of rings going into rods, and we should return how many rods have rings with all the possible colors.

There are

`n`

rings and each ring is either red, green, or blue. The rings are distributedacross ten rodslabeled from`0`

to`9`

.

You are given a string`rings`

of length`2n`

that describes the`n`

rings that are placed onto the rods. Every two characters in`rings`

forms acolor-position pairthat is used to describe each ring where:

Thefirstcharacter of the`ith`

pair denotes the`ith`

ring'scolor(`'R'`

,`'G'`

,`'B'`

).

Thesecondcharacter of the`ith`

pair denotes therodthat the`ith`

ring is placed on (`'0'`

to`'9'`

).For example,

`"R3G2B1"`

describes`n == 3`

rings: a red ring placed onto the rod labeled 3, a green ring placed onto the rod labeled 2, and a blue ring placed onto the rod labeled 1.Return

the number of rods that haveall three colorsof rings on them.

To solve this problem, we mostly need to reformat the input to something that will solve our problem easily. I introduced `arr`

so that the information is better organized. `arr[i][j]`

is true if there is a ring of color `j`

in the rod `i`

.

To do that we need to convert colors to integers [0, 2]. So I decided arbitrarily that B is 0, R is 1, and G is 2.

Our algorithm is the following. First we fill `arr`

by reading the string pair of characters by pair of characters. Then we check for each rod if the 3 colors are there. Finally we return the result.

This is the code I obtained in C++:

`class Solution {`

public:

int charToInt(char c) {

switch(c) {

case 'B':

return 0;

case 'R':

return 1;

case 'G':

return 2;

}

return -1;

}

int countPoints(string rings) {

bool arr[10][3]{};

int n = rings.size() / 2;

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

int color = charToInt(rings.at(2 * i));

int ring = rings.at(2 * i + 1) - '0';

arr[ring][color] = true;

}

int res = 0;

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

int count = 0;

for (int j = 0; j < 3; j++) {

if (arr[i][j]) {

count++;

}

}

if (count == 3) {

res++;

}

}

return res;

}

};

Happy coding :)