mat1과 mat2라는 이름의 n x m 크기의 두 행렬이 있다고 가정합니다. 두 행렬의 (i, j) 위치에 있을 때만 다른 행렬의 두 요소만 교환하여 이 두 행렬이 엄격하게 증가하는지 여부를 확인해야 합니다.
따라서 입력이 다음과 같으면
7 | 1 5 |
1 6 | 1 0 |
1 4 | 9 |
8 | 1 7 |
(7, 14) 및 (10, 17) 쌍을 교환하여 엄격하게 증가시킬 수 있으므로 출력은 True가 됩니다.
1 4 | 1 5 |
1 6 | 1 7 |
7 | 9 |
8 | 1 0 |
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- row :=mat1의 행 수
- col :=mat1의 열 개수
- 0~1행 범위의 i에 대해
- 0에서 col - 1까지의 범위에 있는 j에 대해
- mat1[i,j]> mat2[i,j]이면
- mat1[i, j]과 mat2[i, j] 교환
- mat1[i,j]> mat2[i,j]이면
- 0~1행 범위의 i에 대해
- 0에서 col-2 범위의 j에 대해
- mat1[i, j]>=mat1[i, j + 1] 또는 mat2[i, j]>=mat2[i, j + 1]이면
- 거짓을 반환
- mat1[i, j]>=mat1[i, j + 1] 또는 mat2[i, j]>=mat2[i, j + 1]이면
- 0에서 col-2 범위의 j에 대해
- 0~2행 범위의 i에 대해
- 0에서 col - 1까지의 범위에 있는 j에 대해
- mat1[i, j]>=mat1[i + 1, j] 또는 mat2[i, j]>=mat2[i + 1, j]이면
- 거짓을 반환
- mat1[i, j]>=mat1[i + 1, j] 또는 mat2[i, j]>=mat2[i + 1, j]이면
- 0에서 col - 1까지의 범위에 있는 j에 대해
- 0에서 col - 1까지의 범위에 있는 j에 대해
- 참 반환
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def solve(mat1, mat2):row =len(mat1) col =len(mat1[0]) for i in range(row):for j in range(col):if mat1[i][j]> mat2[i][j]:mat1[i][j], mat2[i][j]=mat2[i][j], mat1[i][j] for i in range(row):for j in range(col-1):mat1[i][j]>=mat1[i][j + 1] 또는 mat2[i][j]>=mat2[i][j + 1]인 경우:False 반환 i in range(row-1):j in range(col):mat1[i][j]>=mat1[i + 1][j] 또는 mat2[i][j]>=mat2[i + 1][j]:거짓 반환 Truemat1 =[[7, 15], [16, 10]]mat2 =[[14, 9], [8, 17]]print(solve(mat1, mat2))사전>입력
[[7, 15],[16, 10]],[[14, 9],[8, 17]]출력
사실