मान लीजिए N x N ग्रिड है, हम इसमें कुछ 1 x 1 x 1 क्यूब रखते हैं। अब प्रत्येक मान v = grid[i][j] ग्रिड सेल (i, j) के ऊपर रखे v क्यूब के टावर को दर्शाता है। हमें परिणामी आकृतियों का कुल पृष्ठीय क्षेत्रफल ढूंढना है।
तो, यदि इनपुट [[1,2],[3,4]] जैसा है, तो आउटपुट 34 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- adjacentArea() फ़ंक्शन परिभाषित करें। यह row लेगा
- area := 0
- i को 0 से row के आकार - 1 तक रेंज में, करें
- यदि row[i] और row[i + 1] शून्येतर हैं, तो
- area := area + 2 * row[i], row[i+1] का न्यूनतम
- यदि row[i] और row[i + 1] शून्येतर हैं, तो
- area लौटाएं
- मुख्य मेथड से निम्न करें -
- z := 2 * (प्रत्येक row में row में value i के योग का योग)
- x_plus_y := ग्रिड में सभी तत्वों का योग * 4
- x_adjacent := ग्रिड में सभी row के लिए adjacentArea(row) का योग
- y_adjacent := ग्रिड में सभी कॉलम के लिए adjacentArea(row) का योग
- 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