Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Projection Area of 3D Shapes (พื้นที่ฉาย影子ของรูปทรง 3D) ใน Python

โจทย์: ให้ Grid N×N ค่า v = grid[i][j] แทนหอคอยลูกบาศก์สูง v หาพื้นที่ฉาย影子 (Projection) บน 3 มุมมอง: Top (XY), Front (YZ), Side (ZX)

Input/Output

Input:  [[1, 2], [3, 4]]
Output: 17

การคำนวณ 3 มุมมอง

  • XY (Top view): นับเซลล์ที่ v > 0 (แต่ละเซลล์ = 1 หน่วยพื้นที่)
  • YZ (Front view): ผลรวมของ Max แต่ละ Row (มองจากหน้า)
  • ZX (Side view): ผลรวมของ Max แต่ละ Column (มองจากข้าง)

ตัวอย่างโค้ด

class Solution:
    def projectionArea(self, grid):
        xy = 0
        yz = 0
        xz = 0
        
        for r, row in enumerate(grid):
            yz += max(row)                    # Front: max of each row
            for c, val in enumerate(row):
                if grid[r][c] > 0:
                    xy += 1                   # Top: count non-zero cells
        
        for col in zip(*grid):                # Transpose for columns
            xz += max(col)                    # Side: max of each column
        
        return xy + yz + xz

ob = Solution()
print(ob.projectionArea([[1, 2], [3, 4]]))

ผลลัพธ์

17

การคำนวณตัวอย่าง [[1,2],[3,4]]:

  • XY (Top): 4 เซลล์ > 0 → 4
  • YZ (Front): max(1,2)=2 + max(3,4)=4 → 6
  • ZX (Side): max(1,3)=3 + max(2,4)=4 → 7
  • Total: 4 + 6 + 7 = 17 ✓

Complexity: O(N²) Time, O(1) Space (ไม่นับ Input)