かいてんマトリクスきょうかい


プログラマ


領域の枠線の数字だけが時計回りに1つ回転します.このとき、位置変更後の数字の中で一番小さい数字を順番に配列に入れて返します
  • 行列は、1行からx行の順に1行の数字を配列する.この行列で長方形の範囲を複数回選択し、枠線部分の数値を時計回りに回転させます.
  • 各回転は4つの整数(x 1、y 1、x 2、y 2)を表し、その意味は以下の通りである.
    x 1行y 1列からx 2行y 2列に対応する領域の矩形から、枠の中の数字の1つを時計回りに回転させる.
  • 行列の縦(行数)行、横(列数)列、および回転のリストクエリが与えられた場合、各回転を配列に適用し、その回転によって位置を変更した数値のうち最小の数値を配列に順番に戻して解く関数を完了します.
  • 行は2または100以下の自然数です.
    columnsは2以上100以下の自然数です.
  • が始まると、行列には1から1までの横方向の数字が増えていると書かれています.
  • クエリのロー数(回転数)は10000より大きい.
  • クエリの各ローは、4つの整数[x 1、y 1、x 2、y 2]である.
  • にゅうしゅつりょく


    rowscolumnsqueriesresult66[[2,2,5,4],[3,3,6,6],[5,1,6,3]][8, 10, 25]33[[1,1,2,2],[1,2,2,3],[2,1,3,2],[2,2,3,3]][1, 1, 5, 3]10097[[1,1,100,97]][1]

    方法


    マトリクスを作成し、4つの部分に分けて回転します.一番左上の数字を基準にします.一部を回転するたびに、最大値を求めて格納します.
  • を回転するには、標準としてスペースが必要です.
  • 左上角を基準として、回転は時計回りに行われ、左端は上向き、最下端は左に移動し、右端は下向き、最上端は右に押される.
    じゅんじょに進める
  • 最後に標準の数字をあるべき場所に戻します.
  • を回転しながら、価格を比較し、最高価格を探します.
  • を受けた人の立場に立って考える
  • コード#コード#

    def solution(rows, columns, queries):
        
        matrix = [[0]*columns for _ in range(rows)]
        k = 1
        for i in range(rows):
            for j in range(columns):
                matrix[i][j] = k
                k += 1
                
        ans = []
        for x1, y1, x2, y2 in queries:
            a = matrix[x1-1][y1-1]
            v = a
            
            # 위로
            for x in range(x1-1, x2-1):
                matrix[x][y1-1] = matrix[x+1][y1-1]
                v = min(v, matrix[x][y1-1]) 
                
            # 왼쪽으로
            for y in range(y1-1, y2-1):
                matrix[x2-1][y] = matrix[x2-1][y+1]
                v = min(v, matrix[x2-1][y]) 
            
            # 아래로
            for x in range(x2-1, x1-1, -1):
                matrix[x][y2-1] = matrix[x-1][y2-1]
                v = min(v, matrix[x][y2-1]) 
            
            # 오른쪽으로
            for y in range(y2-1, y1-1, -1):
                matrix[x1-1][y] = matrix[x1-1][y-1]
                v = min(v, matrix[x1-1][y]) 
            
            matrix[x1-1][y1] = a
            ans.append(v)
            
        return ans