[プログラマ]マトリクスの枠線を回転
2352 ワード
こんにちは。
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で勉強する形で一緒に勉強したほうがいいと思います.
私だけで解決するより、他の人のやり方を見たいです.ははは
それではここまでにしましょう
こんにちは
Reference
この問題について([プログラマ]マトリクスの枠線を回転), 我々は、より多くの情報をここで見つけました
https://velog.io/@minskim2/프로그래머스-행렬-테두리-회전하기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について([プログラマ]マトリクスの枠線を回転), 我々は、より多くの情報をここで見つけました https://velog.io/@minskim2/프로그래머스-행렬-테두리-회전하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol