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

Python에서만 해당 값을 교환하여 두 행렬을 엄격하게 증가시킬 수 있는지 확인하십시오.

<시간/>

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] 교환
    • 0~1행 범위의 i에 대해
      • 0에서 col-2 범위의 j에 대해
        • mat1[i, j]>=mat1[i, j + 1] 또는 mat2[i, j]>=mat2[i, j + 1]이면
          • 거짓을 반환
    • 0~2행 범위의 i에 대해
      • 0에서 col - 1까지의 범위에 있는 j에 대해
        • mat1[i, j]>=mat1[i + 1, j] 또는 mat2[i, j]>=mat2[i + 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]]

출력

사실