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

C++-এ Lonely Pixel I সমস্যা সমাধান


ধরি আমাদের একটি ছবি (picture) আছে যা কালো (B) এবং সাদা (W) পিক্সেল দিয়ে গঠিত। আমাদের লক্ষ্য হলো কালো "lonely pixel"-এর সংখ্যা বের করা। ছবিটি ২D ক্যারেক্টার অ্যারে দিয়ে উপস্থাপিত, যেখানে 'B' = কালো, 'W' = সাদা।

একটি কালো lonely pixel হলো 'B' যেটি এমন একটি অবস্থানে আছে যাতে সেটির সারি (row) এবং কলাম (column)-এ অন্য কোনো কালো পিক্সেল নেই।

ইনপুট উদাহরণ:

WWB
WBW
BWW

আউটপুট: ৩। কারণ তিনটি 'B' সবই lonely pixel।

সমাধানের ধাপসমূহ:

  • n := picture.size() (সারি সংখ্যা)
  • m := (n > 0 ? picture[0].size() : 0) (কলাম সংখ্যা)
  • দুটি অ্যারে row[n] এবং col[m] ডিফাইন করুন
  • ret := 0, firstRow := 0
  • i=0 থেকে n পর্যন্ত লুপ:
    • j=0 থেকে m পর্যন্ত লুপ:
      • যদি picture[i][j] == 'B' হয়:
        • যদি picture[0][j] < 'Y' && picture[0][j] != 'V', তবে picture[0][j]++
        • যদি i == 0, firstRow++
        • অন্যথায় যদি picture[i][0] < 'Y' && picture[i][0] != 'V', তবে picture[i][0]++
  • i=0 থেকে n পর্যন্ত লুপ:
    • j=0 থেকে m পর্যন্ত লুপ:
      • যদি picture[i][j] < 'W' && (picture[0][j] == 'C' || picture[0][j] == 'X') হয়:
        • যদি i == 0: ret += (ret + firstRow == 1 ? 1 : 0)
        • অন্যথায় যদি picture[i][0] == 'C' || picture[i][0] == 'X': ret++
  • ret রিটার্ন করুন

উদাহরণ

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    int findLonelyPixel(vector<vector<char>>& picture) {
        int n = picture.size();
        int m = n ? picture[0].size() : 0;
        vector<int> row(n);
        vector<int> col(m);
        int ret = 0;
        int firstRow = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (picture[i][j] == 'B') {
                    if (picture[0][j] < 'Y' && picture[0][j] != 'V') {
                        picture[0][j]++;
                    }
                    if (i == 0)
                        firstRow++;
                    else if (picture[i][0] < 'Y' && picture[i][0] != 'V') {
                        picture[i][0]++;
                    }
                }
            }
        }
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (picture[i][j] < 'W' && (picture[0][j] == 'C' || picture[0][j] == 'X')) {
                    if (i == 0)
                        ret += firstRow == 1 ? 1 : 0;
                    else if (picture[i][0] == 'C' || picture[i][0] == 'X')
                        ret++;
                }
            }
        }
        return ret;
    }
};

int main() {
    Solution ob;
    vector<vector<char>> v = {{'W','W','B'},{'W','B','W'},{'B','W','W'}};
    cout << (ob.findLonelyPixel(v));
}

ইনপুট

{{'W','W','B'},{'W','B','W'},{'B','W','W'}}

আউটপুট

3
  1. C++ Enum: একটি গাইড

  2. C++-এ Switch Statement: ব্যবহার করার পদ্ধতি

  3. Frugal সংখ্যা চেক করা (C++)

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