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

Python에서 행렬의 모든 행이 서로의 원형 회전인지 확인

<시간/>

정수를 포함하는 n*n 크기의 행렬이 제공된다고 가정합니다. 해당 행렬의 모든 행이 이전 행의 원형 회전인지 알아내야 합니다. 첫 번째 행의 경우 n번째 행의 원형 회전이어야 합니다.

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

B A C
C A
C A
A C

그러면 출력이 True가 됩니다.

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

  • concat :=빈 문자열
  • 0에서 행 수까지의 범위에 있는 i에 대해 다음을 수행합니다.
    • concat :=concat 연결 "-" 연결 행렬[0,i]
  • concat :=연결 연결 연결
  • 행렬 크기 범위 1에 있는 i에 대해
    • curr_row :=빈 문자열
    • 0에서 열 수까지 범위의 j에 대해 다음을 수행합니다.
      • curr_row :=curr_row 연결 "-" 행렬 연결[i,j]
    • 문자열 연결에 curr_row가 있으면
      • 참 반환
  • 거짓을 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

def solve(matrix) :
   concat = ""
   for i in range(len(matrix)) :
      concat = concat + "-" + str(matrix[0][i])
   concat = concat + concat
   for i in range(1, len(matrix)) :
      curr_row = ""
      for j in range(len(matrix[0])) :
         curr_row = curr_row + "-" + str(matrix[i][j])
      if (concat.find(curr_row)) :
         return True
   return False
matrix = [['B', 'A', 'D', 'C'],
         ['C', 'B', 'A', 'D'],
         ['D', 'C', 'B', 'A'],
         ['A', 'D', 'C', 'B']]
print(solve(matrix))

입력

[['B', 'A', 'D', 'C'],
['C', 'B', 'A', 'D'],
['D', 'C', 'B', 'A'],
['A', 'D', 'C', 'B']]

출력

True