সমস্যা বিবরণ
একটি m x n আকারের ২D গ্রিড এবং একটি ভেরিয়েবল k দেওয়া আছে। গ্রিডকে k বার শিফট করতে হবে। শিফট অপারেশন:
- G[i, j] → G[i, j+1]
- G[i, n-1] → G[i+1, 0]
- G[m-1, n-1] → G[0, 0]
উদাহরণ: ৩x৩ গ্রিড ১ বার শিফট করলে আউটপুট নিচের মতো হবে।
সমাধানের ধাপসমূহ
- শিফট অপারেশন মাট্রিক্স ইনপুট নেবে।
- n = রো সংখ্যা, m = কলাম সংখ্যা, x = বটম-রাইট এলিমেন্ট।
- i = n-1 থেকে ০ পর্যন্ত, j = m-1 থেকে ০ পর্যন্ত লুপ:
- j=0 এবং i>0 হলে G[i][j] = G[i-1][m-1]
- j>0 হলে G[i][j] = G[i][j-1]
- G[0][0] = x
- k বার শিফট অপারেশন কল করুন।
- গ্রিড রিটার্ন করুন।
C++ কোড উদাহরণ
#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<vector<int>> v) {
cout << "[";
for (int i = 0; i < v.size(); i++) {
cout << "[";
for (int j = 0; j < v[i].size(); j++)
cout << v[i][j] << ", ";
cout << "],";
}
cout << "]" << endl;
}
class Solution {
public:
void shift(vector<vector<int>>& grid) {
int n = grid.size();
int m = grid[0].size();
int x = grid[n-1][m-1];
for (int i = n-1; i >= 0; i--) {
for (int j = m-1; j >= 0; j--) {
if (j == 0 && i > 0)
grid[i][j] = grid[i-1][m-1];
else if (j > 0)
grid[i][j] = grid[i][j-1];
}
}
grid[0][0] = x;
}
vector<vector<int>> shiftGrid(vector<vector<int>>& g, int k) {
while (k--) shift(g);
return g;
}
};
int main() {
Solution ob;
vector<vector<int>> mat = {{1,2,3},{4,5,6},{7,8,9}};
print_vector(ob.shiftGrid(mat, 1));
}
ইনপুট
{{1,2,3},{4,5,6},{7,8,9}} 1
আউটপুট
[[9, 1, 2, ],[3, 4, 5, ],[6, 7, 8, ],]