정수를 포함하는 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