Count number of unique ways to paint a N x 3 grid
Given an integer N, the task is to paint a grid of size N x 3 using colors Red, Yellow, or Green while making such that no pair of adjacent cells has the same color. Print the number of distinct ways in which it is possible
Examples:
Input: N = 1
Output: 12
Explanation:
Following 12 possible ways to paint the grid exists:
- Red, Yellow, Red
- Yellow, Red, Yellow
- Green, Red, Yellow
- Red, Yellow, Green
- Yellow, Red, Green
- Green, Red, Green
- Red, Green, Red
- Yellow, Green, Red
- Green, Yellow, Red
- Red, Green, Yellow
- Yellow, Green, Yellow
- Green, Yellow, Green
Input: N = 2
Output: 102
Approach: Follow the steps below to solve the problem:
- Ways to color a row can be split into the following two categories:
- The leftmost and rightmost cells are of the same color.
- The leftmost and rightmost cells are of different colors.
- Considering the first case:
- Six possible ways exist to paint the row such that the leftmost and rightmost colors are of the same.
- For every color occupying both the leftmost and rightmost cell, there exists two different colors with which the middle row can be colored.
- Considering the second case:
- Six possible ways exist to paint the leftmost and rightmost colors are different.
- Three choices for the left cell, two choices for the middle, and fill the rightmost cell with the only remaining color. Therefore, the total number of possibilities is 3*2*1 = 6.
- Now, for the subsequent cells, look at the following example:
- If the previous row is painted as Red Green Red, then there are the following five valid ways to color the current row:
- {Green Red Green}
- {Green Red Yellow}
- {Green Yellow Green}
- {Yellow Red Green}
- {Yellow Red Yellow}
- From the above observation, it is clear that three possibilities have ends with the same color, and two possibilities have ends with different colors.
- If the previous row is colored Red Green Yellow, the following four possibilities of coloring the current row exists:
- {Green Red Green}
- {Green Yellow Red}
- {Green Yellow Green}
- {Yellow Red Green}
- From the above observation, it is clear that possibilities have ends the same color, and two possibilities have ends with different colors.
- Therefore, based on the above observations, the following recurrence relation can be defined for the number of ways to paint the N rows:
Count of ways to color current row having ends of same color SN+1 = 3 * SN + 2DN
Count of ways to color current row having ends of different colors DN+1 = 2 * SN + 2DN
Total number of ways to paint all N rows is equal to the sum of SN and DN.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void waysToPaint( int n)
{
int same = 6;
int diff = 6;
for ( int i = 0; i < n - 1; i++) {
long sameTmp = 3 * same + 2 * diff;
long diffTmp = 2 * same + 2 * diff;
same = sameTmp;
diff = diffTmp;
}
cout << (same + diff);
}
int main()
{
int N = 2;
waysToPaint(N);
}
|
Java
import java.io.*;
import java.lang.*;
import java.util.*;
class GFG {
static void waysToPaint( int n)
{
long same = 6 ;
long diff = 6 ;
for ( int i = 0 ; i < n - 1 ; i++) {
long sameTmp = 3 * same + 2 * diff;
long diffTmp = 2 * same + 2 * diff;
same = sameTmp;
diff = diffTmp;
}
System.out.println(same + diff);
}
public static void main(String[] args)
{
int N = 2 ;
waysToPaint(N);
}
}
|
Python3
def waysToPaint(n):
same = 6
diff = 6
for _ in range (n - 1 ):
sameTmp = 3 * same + 2 * diff
diffTmp = 2 * same + 2 * diff
same = sameTmp
diff = diffTmp
print (same + diff)
N = 2
waysToPaint(N)
|
C#
using System;
class GFG {
static void waysToPaint( int n)
{
long same = 6;
long diff = 6;
for ( int i = 0; i < n - 1; i++) {
long sameTmp = 3 * same + 2 * diff;
long diffTmp = 2 * same + 2 * diff;
same = sameTmp;
diff = diffTmp;
}
Console.WriteLine(same + diff);
}
static public void Main()
{
int N = 2;
waysToPaint(N);
}
}
|
Javascript
<script>
function waysToPaint(n)
{
var same = 6;
var diff = 6;
for ( var i = 0; i < n - 1; i++)
{
var sameTmp = 3 * same + 2 * diff;
var diffTmp = 2 * same + 2 * diff;
same = sameTmp;
diff = diffTmp;
}
document.write(same + diff);
}
var N = 2;
waysToPaint(N);
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(1)
Last Updated :
13 Jul, 2021
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...