মান লেই একটি N x N গ্রিড আছে, সেখানে আমরা কিছু 1 x 1 x 1 কিউব রাখি। এখন প্রতিটি ভ্যালু v = grid[i][j] রিপ্রেজেন্ট করে grid cell (i, j)-র ওপর রাখা v টি কিউবের টাওয়ার। আমাদের ফলাফল শেপের টোটাল সারফেস এরিয়া বের করতে হবে।
সেজন্য, যদি ইনপুট হয় [[1,2],[3,4]], তবে আউটপুট হবে ৩৪।
এটি সমাধান করার জন্য আমরা নিচের ধাপগুলো অনুসরণ করব −
- adjacentArea() ফাংশন ডিফাইন করুন। এটি row নিবে
- area := 0
- i = 0 থেকে row-এর সাইজ - 1 পর্যন্ত লুপ
- যদি row[i] এবং row[i + 1] নন-জিরো হয়, তবে
- area := area + 2 * min(row[i], row[i+1])
- যদি row[i] এবং row[i + 1] নন-জিরো হয়, তবে
- area রিটার্ন
- মেইন মেথড থেকে নিচের কাজগুলো করুন −
- z := 2 * (sum of (sum of i > 0 for i in row) for all row in grid)
- x_plus_y := grid-এ সব এলিমেন্টের সমষ্টি * 4
- x_adjacent := sum of adjacentArea(row) for all row in grid
- y_adjacent := sum of adjacentArea(row) for all column in the grid
- z + (x_plus_y - x_adjacent - y_adjacent) রিটার্ন
বেস্টার বোঝার জন্য নিচের ইম্প্লিমেন্টেশন দেখুন −
উদাহরণ
class Solution:
def surfaceArea(self, grid):
def adjacentArea(row):
area = 0
for i in range(len(row) - 1):
if row[i] and row[i + 1]:
area += 2 * min(row[i], row[i+1])
return area
z = sum([sum(i > 0 for i in row) for row in grid]) * 2
x_plus_y = sum([sum(row) for row in grid]) * 4
x_adjacent = sum([adjacentArea(row) for row in grid])
y_adjacent = sum([adjacentArea(row) for row in zip(*grid)])
return z + (x_plus_y - x_adjacent - y_adjacent)
ob = Solution()
print(ob.surfaceArea([[1,2],[3,4]]))
ইনপুট
[[1,2],[3,4]]
আউটপুট
34