কম্পিউটার টিউটোরিয়াল

বোর্ডে ব্যাটলশিপ গণনা C++-এ


ধরা যাক একটি 2D বোর্ড আছে, আমরা বোর্ডে কতগুলো ব্যাটলশিপ আছে তা গণনা করব। ব্যাটলশিপগুলো 'X' চিহ্ন দিয়ে রিপ্রেজেন্ট করা হয়, খালি স্লটগুলো '.' দিয়ে। আমরা নিচের নিয়মগুলো ধরে নিতে পারি −

  • আপনি একটি বৈধ বোর্ড পাবেন, যা শুধু ব্যাটলশিপ বা খালি স্লট দিয়ে তৈরি।

  • ব্যাটলশিপগুলো শুধু অনুভূমিক বা লম্বভাবে রাখা যাবে। অর্থাৎ সেগুলো শুধু 1xN (১ সারি, N কলাম) বা Nx1 (N সারি, ১ কলাম) আকারের হতে পারে, যেখানে N যেকোনো আকারের হতে পারে।

  • দুই ব্যাটলশিপের মধ্যকার কমপক্ষে একটি অনুভূমিক বা লম্ব কেল দূরত্ব থাকবে - কোনো এডজেসেন্ট ব্যাটলশিপ থাকবে না।

যদি বোর্ড নিচের মতো হয়:

X..X
...X
...X

তবে আউটপুট হবে 2, কারণ দুটি ব্যাটলশিপ আছে।

সমাধানের ধাপগুলো −

  • ans := 0, n := সারি সংখ্যা এবং m := কলাম সংখ্যা

  • i-তম সারি için

    • j-তম কলাম için

      • যদি board[i, j] ডট হয়, তবে পরবর্তী ইটারেশনে যাব

      • যদি i > 0 এবং board[i-1, j] = 'X' হয়, তবে পরবর্তী ইটারেশনে যাব

      • যদি j > 0 এবং board[i, j-1] = 'X' হয়, তবে পরবর্তী ইটারেশনে যাব

      • ans ১ বাড়াব

  • ans রিটার্ন করব

নিচের ইমপ্লিমেন্টেশন দেখুন −

উদাহরণ

#include <bits/stdc++.h> using namespace std; class Solution {    public:    int countBattleships(vector<vector<char>>& board) {       int ans = 0;       int n = board.size();       int m = board[0].size();       for(int i = 0; i < n; i++){          for(int j = 0; j < m; j++){             if(board[i][j] == '.')continue;             if(i > 0 && board[i - 1][j] == 'X')continue;             if(j > 0 && board[i][j - 1] == 'X')continue;             ans++;          }       }       return ans;    } }; main(){    vector<vector<char>> v = {{'X','.','.','X'},{'.','.','.','X'},{'.','.','.','X'}};    Solution ob;    cout << (ob.countBattleships(v)); }

ইনপুট

[["X",".",".","X"],[".",".",".","X"],[".",".",".","X"]]

আউটপুট

2

  1. C++ দিয়ে পেন্টাটপ (Pentatope) সংখ্যা বের করা

  2. C++-এ একটি বোর্ডকে বর্গাকারে কাটার ন্যূনতম খরচ

  3. C++-এ আইডেন্টিফায়ার (Identifiers)

  4. লিনাক্সে C++-এর জন্য সেরা IDE কী?