행렬 [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]]