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

파이썬에서 나선형 순서로 행렬 요소를 인쇄하는 프로그램

<시간/>

2D 매트릭스 매트가 있다고 가정합니다. 행렬 요소를 나선형으로 인쇄해야 합니다. 처음에는 첫 번째 행(mat[0, 0])에서 시작하여 전체 내용을 인쇄한 다음 마지막 열을 따라 인쇄한 다음 마지막 행을 따라 인쇄하는 방식으로 요소를 나선형으로 인쇄합니다.

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

7
10
9
2
9
1
6
2
3
9
1
4
2
7
5
9
9
11

출력은 [7, 10, 9, 1, 3, 4, 5, 11, 9, 9, 2, 9, 6, 2, 9, 2, 1, 7]

입니다.

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

  • d :=0
  • 위쪽 :=0, 아래쪽 :=행렬의 행 개수 – 1, 왼쪽 :=0, 오른쪽 :=행렬의 열 개수 - 1
  • c :=0
  • res :=새 목록
  • 방향:=0
  • 위쪽 <=아래쪽 및 왼쪽 <=오른쪽, do
    • 방향이 0이면
      • 왼쪽에서 오른쪽으로 + 1 범위의 i에 대해
        • 매트릭스[top, i]를 res에 삽입
      • 상단 :=상단 + 1
    • 방향이 1과 같으면
      • 위에서 아래로 + 1 범위의 i에 대해
        • 매트릭스[i, right]를 res에 삽입
      • 오른쪽 :=오른쪽 - 1
    • 방향이 2와 같으면
      • 오른쪽에서 왼쪽으로 범위 내 i의 경우 - 1, 1 감소, do
        • 매트릭스[down, i]를 res에 삽입
      • 아래로 :=아래로 - 1
    • 방향이 3과 같으면
      • 위에서 1까지의 범위에 있는 i에 대해 1 감소, do
        • 매트릭스[i, left]를 res에 삽입
      • 왼쪽 :=왼쪽 + 1
  • 방향 :=(방향 + 1) 모드 4
  • 반환 결과

더 나은 이해를 위해 다음 구현을 살펴보겠습니다.

예시

class Solution:
   def solve(self, matrix):
      d = 0
      top = 0
      down = len(matrix) - 1
      left = 0
      right = len(matrix[0]) - 1
      c = 0
      res = []
      direction = 0
      while top <= down and left <= right:
         if direction == 0:
            for i in range(left, right + 1):
               res.append(matrix[top][i])
               top += 1

         if direction == 1:
            for i in range(top, down + 1):
               res.append(matrix[i][right])
            right -= 1

         if direction == 2:
            for i in range(right, left - 1, -1):
               res.append(matrix[down][i])
            down -= 1

         if direction == 3:
            for i in range(down, top - 1, -1):
               res.append(matrix[i][left])
            left += 1

         direction = (direction + 1) % 4
      return res

ob = Solution()
matrix = [
   [7, 10, 9],
   [2, 9, 1],
   [6, 2, 3],
   [9, 1, 4],
   [2, 7, 5],
   [9, 9, 11]
]
print(ob.solve(matrix))

입력

[    
[7, 10, 9],    

[2, 9, 1],    

[6, 2, 3],    

[9, 1, 4],    

[2, 7, 5],    

[9, 9, 11]

]

출력

[7, 10, 9, 1, 3, 4, 5, 11, 9, 9, 2, 9, 6, 2, 9, 2, 1, 7]