โจทย์: ให้ 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)