[問題解決]プログラマ-回転マトリクスボーダー[レベル2]


問題の説明は省略します。リンクをクリックしてください。


提问链接


I/O例


rowscolumnsqueriesresult 6 6 [[2,2,5,4],[3,3,6,6],[5,1,6,3]] [8, 10, 25] 3 3 [[1,1,2,2],[1,2,2,3],[2,1,3,2],[2,2,3,3]] [1, 1, 5, 3] 100 97 [[1,1,100,97]] [1]

に答える


直感的な画像



(画像エラー:1 2 3ではなく3 2 1の順)

コード順序

  • 行列を作成し、数値1が増加する形で値を初期化します.
  • 左上隅の点をfirst変数に格納します.
  • 左から、1マス下から上へ移動します.
  • for x1, y1, x2, y2 in queries:
            first = graph[x1-1][y1-1]
            mini = first
            # 왼쪽 세로 부분 (아래에서 위로 진행)
            for k in range(x1-1, x2-1):
                temp = graph[k+1][y1-1]
                graph[k][y1-1] = temp
                mini = min(mini, temp)
  • 底辺を右から左に移動します.
  • 右側に値を上から下に移動します.
  • 上を左から右に移動し、最後の値は重複した値を格納し、保存された最初の値を格納します.
  • 、3、4、5つのプロセスが経過するたびにmini値を転送の現在値と比較し、最大値を格納します.
  • コード#コード#


    マイコード

    def solution(rows, columns, queries):
        answer = []
        graph = [[0 for _ in range(columns)] for _ in range(rows)]
        
        idx = 1
        for i in range(rows):
            for j in range(columns):
                graph[i][j] = idx
                idx += 1
                
        for x1, y1, x2, y2 in queries:
            first = graph[x1-1][y1-1]
            mini= first
            
            # 왼쪽변
            for k in range(x1-1, x2-1):
                graph[k][y1-1] = graph[k+1][y1-1]
                mini = min(mini, graph[k+1][y1-1])
            # 밑변 
            for k in range(y1-1, y2-1):
                graph[x2-1][k] = graph[x2-1][k+1]
                mini = min(mini, graph[x2-1][k+1])
            # 오른변
            for k in range(x2-1, x1-1, -1):
                graph[k][y2-1] = graph[k-1][y2-1]
                mini = min(mini, graph[k-1][y2-1])
            # 윗변
            for k in range(y2-1, y1-1, -1):
                graph[x1-1][k] = graph[x1-1][k-1]
                mini = min(mini,graph[x1-1][k-1])
            
            graph[x1-1][y1] = first
            answer.append(mini)
        return answer