[プログラマ]マトリクスの枠線を回転


こんにちは。


MINDOLです
私は最近ギターを弾いてゲームをしています.
昨日部活の後輩と一緒にstartという歌を練習しましたが、後輩が私より上手に弾いていて気まずい思いをしました.もっと頑張ります.
この問題はマトリクスに関連しています.
(線形代数を思い出す...)
問題を見てみましょう.

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


質問リンク


例を回転させることで素早く理解できます.

与えられた行列の座標値が与えられた場合、与えられた範囲の境界を回転し、最大値を求める.

整理すると。

  • 初期行列を作成します.
  • 行列で指定された範囲を回転します.
  • 回転の行列を作り、最高値を求めます.
  • で新しく作成されたマトリクスで次の回転を実行し、繰り返します.
  • 回転行列の関数を実装するだけでよい.
    難易度は高くない!
    ではハーモニーを見てみましょう
    class Solution {
    	int[][] matrix;		// 행렬 변수
    
    	int curl(int x1, int y1, int x2, int y2) {
    		int x1y2 = matrix[x1][y2];	// 덮어씌워지는 부분
    		int min = 10000;	// 최솟값은 10000 이하
    
    		for (int i=y2; i>y1; i--) {		// 행렬 윗 부분 회전
    			if (matrix[x1][i] < min)	// 최솟값 구하기
    				min = matrix[x1][i];
    			matrix[x1][i] = matrix[x1][i-1];
    		}
    		for (int i=x1; i<x2; i++) {		//행렬 왼쪽 부분 회전
    			if (matrix[i][y1] < min)
    				min = matrix[i][y1];
    			matrix[i][y1] = matrix[i+1][y1];
    		}
    		for (int i=y1; i<y2; i++) {		// 행렬 아랫 부분 회전
    			if (matrix[x2][i] < min)
    				min = matrix[x2][i];
    			matrix[x2][i] = matrix[x2][i+1];
    		}
    		for (int i=x2; i>x1; i--) {		// 행렬 오른쪽 부분 회전
    			if (matrix[i][y2] < min)
    				min = matrix[i][y2];
    			matrix[i][y2] = matrix[i-1][y2];
    		}
    		matrix[x1+1][y2] = x1y2;		// 덮어씌워진 부분 복구
    		return min;		// 최솟값 반환
    	}
    
    	public int[] solution(int rows, int columns, int[][] queries) {
    		int[] answer = new int[queries.length];
    		matrix = new int[rows][columns];
    
    		for (int i=0; i<rows; i++)		// 행렬에 초기 값 대입
    			for (int j=0; j<columns; j++)
    				matrix[i][j] = j+1 + columns * i;
    		for (int i=0; i<queries.length; i++)	// 회전
    			answer[i] = curl(queries[i][0]-1, queries[i][1]-1, queries[i][2]-1, queries[i][3]-1);
    		return answer;
    	}
    }
    最近ギターを练习したり、友达とゲームをしたりして忙しいです.
    1日に1つの問題をしなければなりませんが、いつもできないような気がします.
    ギターの練習を続け、ゲームを減らす.夜だけやってるけど思ったより時間が少ない
    COTEDOで勉強する形で一緒に勉強したほうがいいと思います.
    私だけで解決するより、他の人のやり方を見たいです.ははは
    それではここまでにしましょう

    こんにちは