Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

각 아파트의 높이에 대한 행렬을 찾는 프로그램은 Python에서 가능한 최대 높이로 증가합니까?

<시간/>

행렬 [r, c]가 도시의 콘도미니엄 높이를 나타내는 2D 행렬이 있다고 가정합니다. 서쪽-동쪽 스카이라인은 행렬의 각 행의 최대값을 취하여 볼 수 있습니다. 그리고 각 기둥의 최대값을 취하여 남북의 스카이라인을 볼 수 있습니다. 동서남북 동일한 스카이라인을 유지하면서 각 콘도의 높이를 가능한 최대 높이로 높이는 새로운 매트릭스를 찾아야 합니다.

따라서 입력이 다음과 같으면

2 3 4
5 6 7
8 9 10


4 4 4
7 7 7
8 9 10

동서 스카이라인이 [4, 7, 10]이고 남북 스카이라인이 [8, 9, 10]이기 때문입니다. 스카이라인을 변경하지 않고 첫 번째 행의 모든 ​​항목을 값 4로 늘리고 두 번째 행의 모든 ​​항목을 값 7로 늘릴 수 있습니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다.

  • r :=행렬의 각 행의 최대값 목록

  • c :=행렬의 각 열의 최대값 목록

  • 행렬의 행 수까지 범위 0에 있는 i에 대해

    • 행렬의 열 개수에 대한 범위 0의 j에 대해 수행

      • r[i]

        • 행렬[i, j] :=r[i]

      • 그렇지 않으면

        • 행렬[i, j] :=c[j]

  • 반환 행렬

더 나은 이해를 위해 다음 구현을 살펴보겠습니다.

예시

class Solution:
   def solve(self, matrix):
      r = [max(i) for i in matrix]
      c = [max(i) for i in zip(*matrix)]
      for i in range(len(matrix)):
         for j in range(len(matrix[i])):
            if r[i] < c[j]:
               matrix[i][j] = r[i]
            else:
               matrix[i][j] = c[j]
      return matrix

ob = Solution()
matrix = [
   [2, 3, 4],
   [5, 6, 7],
   [8, 9, 10]
]
print(ob.solve(matrix))

입력

[[2, 3, 4],
[5, 6, 7],
[8, 9, 10]]

출력

[[4, 4, 4], [7, 7, 7], [8, 9, 10]]