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