Programmersマトリクス境界を回転するには

2526 ワード

Programmersマトリクス境界を回転するには


Link: https://programmers.co.kr/learn/courses/30/lessons/77485

問題の説明


行x columnsサイズのマトリクス.行列の数字は1からrows x columnsの順に1行です.この行列で長方形の範囲を複数回選択し、枠線部分の数値を時計回りに回転させます.各回転は4つの整数(x 1、y 1、x 2、y 2)で表され、その意味は以下の通りである.
x 1行y 1列からx 2行y 2列に対応する領域の矩形から、枠の中の数字の1つを時計回りに回転させる.
次に、6 x 6サイズマトリクスの例を示します.

この行列に回転(2,2,5,4)を適用すると、領域の枠線が時計回りに回転し、下図のように2行2列から5行4列になります.このとき、中央に15と21がある領域を回転させないように注意しましょう.

行列の縦長(行数)行、横長(列数)列、および回転リストをクエリーする場合は、各回転を配列に適用し、回転位置によって変更された数値の最小値を配列に順番に戻して解く関数を完了します.

せいげんじょうけん

  • 行は2または100以下の自然数です.
  • 列は2以上100以下の自然数です.
  • が始まると、行列には1から1までの横方向の数字が増えていると書かれています.
  • 、すなわち、回転がない場合、i行j列の数字は(i-1)x columns+jとなる.
  • クエリのロー数(回転数)は10000より大きい.
  • クエリの各ローは、4つの整数[x 1、y 1、x 2、y 2]である.
  • x 1行のy 1列からx 2行のy 2列まで時計回りに領域の枠を回転させる.
  • 1≦x 1すべての回転は順番に行われます.
  • 例えば、2番目の回転の答えは、1番目の回転を実行し、その状態で2番目の回転を実行したときに、移動する数字の最大値を求めることである.

    コード|Python

    def rotate(map,q):
        temp = map[q[0]-1][q[1]-1]
        min_list = [map[q[0]-1][q[1]-1]]
        
        #left side
        for i in range(q[0]-1,q[2]-1):
            map[i][q[1]-1] = map[i+1][q[1]-1]
            min_list.append(map[i+1][q[1]-1])
    
        #bottom side
        for i in range(q[1]-1,q[3]-1):
            map[q[2]-1][i] = map[q[2]-1][i+1]
            min_list.append(map[q[2]-1][i+1])
    
        #right side
        for i in range(q[2]-1,q[0]-1,-1):
            map[i][q[3]-1] = map[i-1][q[3]-1]
            min_list.append(map[i-1][q[3]-1])
    
        #top side
        for i in range(q[3]-1,q[1]-1,-1):
            map[q[0]-1][i] = map[q[0]-1][i-1]
            min_list.append(map[q[0]-1][i-1])
        map[q[0]-1][q[1]] = temp
        return min(min_list)
    
    def solution(rows, columns, queries):
        answer = []
        map = [[0 for _ in range(columns)] for _ in range(rows)] 
        count = 0
        for i in range(rows):
            for j in range(columns):
                count +=1
                map[i][j] = count
        for i in range(len(queries)):
            answer.append((rotate(map,queries[i])))
        return answer

    コード結果