[プログラマー(Programmers)]2002 Dev-Martching:Webバックエンド開発者(上半期):回転マトリクスフレーム(java)
14857 ワード
こんにちは!今日は回転マトリクスの枠線を解きます.この問題は2021 Dev-Metching:Webバックエンド開発者(上半期)から提起された.
https://programmers.co.kr/learn/courses/30/lessons/77485
上図は、回転関数の4つのfor文の回転順序を示しています.まず、初期数字「8」をtmp変数に入れ、14を8の位置に入れます.最後に、8を9の位置に入れ、Rotate関数は終了します.
どうやって解くか理解しています.論理は難しくないように見えます.再帰関数で解いてみたが,解く過程で太陽の光が強すぎて断念した.別の方法で解いてみようと思っていたのですが、一つの問題で時間がもったいないと思い、答えを探しに行きました.やはりアルゴリズム能力者は本当に多いです.
[参考資料]
https://dev-note-97.tistory.com/265
質問リンク
https://programmers.co.kr/learn/courses/30/lessons/77485
問題を解く
1000 rotate関数の説明
上図は、回転関数の4つのfor文の回転順序を示しています.まず、初期数字「8」をtmp変数に入れ、14を8の位置に入れます.最後に、8を9の位置に入れ、Rotate関数は終了します.
完全なコード
class Solution {
private int[][] matrix;
public int[] solution(int rows, int columns, int[][] queries) {
matrix = new int[rows][columns];
int[] answer = new int[queries.length];
int num = 1;
// matrix 행렬 초기화
for(int i = 0; i < rows; i++){
for(int j = 0; j < columns; j++){
matrix[i][j] = num;
num++;
}
}
for(int i = 0; i < queries.length; i++){
answer[i] = rotate(queries[i]);
}
return answer;
}
private int rotate(int[] query){
int r1 = query[0]-1;
int c1 = query[1]-1;
int r2 = query[2]-1;
int c2 = query[3]-1;
int temp = this.matrix[r1][c1]; // 시작위치 값 임시저장
int min = temp; // min값 초기화
for(int i = r1; i < r2; i++){ // 문제설명 그림의 1번
matrix[i][c1] = matrix[i+1][c1];
if(min > matrix[i][c1]) min = matrix[i][c1];
}
for(int i = c1; i < c2; i++){ // 문제설명 그림의 2번
matrix[r2][i] = matrix[r2][i+1];
if(min > matrix[r2][i]) min = matrix[r2][i];
}
for(int i = r2; i > r1; i--){ // 문제설명 그림의 3번
matrix[i][c2] = matrix[i-1][c2];
if(min > matrix[i][c2]) min = matrix[i][c2];
}
for(int i = c2; i > c1; i--){ // 문제설명 그림의 4번
matrix[r1][i] = matrix[r1][i-1];
if(min > matrix[r1][i]) min = matrix[r1][i];
}
matrix[r1][c1+1] = temp; // 임시저장한 값 저장
return min; //최솟값 반환
}
}
に感銘を与える
どうやって解くか理解しています.論理は難しくないように見えます.再帰関数で解いてみたが,解く過程で太陽の光が強すぎて断念した.別の方法で解いてみようと思っていたのですが、一つの問題で時間がもったいないと思い、答えを探しに行きました.やはりアルゴリズム能力者は本当に多いです.
[参考資料]
https://dev-note-97.tistory.com/265
Reference
この問題について([プログラマー(Programmers)]2002 Dev-Martching:Webバックエンド開発者(上半期):回転マトリクスフレーム(java)), 我々は、より多くの情報をここで見つけました https://velog.io/@fantastik/23テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol