[プログラマ]マトリクスの枠線を回転
回答日:2021年-08-12
質問する
質問する
質問リンク:https://programmers.co.kr/learn/courses/30/lessons/77485
アクセスと解析
指定された座標を2つの頂点として長方形を描く場合、長方形の4つのエッジが通る座標を基準にして、時計回りに1つの値を1つずつ移動します.
長方形の右上隅の値(x 1,y 2)を格納し、上、左、下、右の順に時計回りに1マス移動し、最後に保存した値を代入する(x 1+1,y 2).
コード#コード# #include <string>
#include <vector>
using namespace std;
vector<int> solution(int rows, int columns, vector<vector<int>> queries) {
vector<int> answer;
int arr[101][101];
int num = 1;
for (int i = 1; i <= rows; i++) {
for (int j = 1; j <= columns; j++) {
arr[i][j] = num++;
}
}
for (auto q : queries) {
int x1 = q[0], y1 = q[1], x2 = q[2], y2 = q[3];
int corner = arr[x1][y2];
int ret = corner;
for (int i = y2; i > y1; i--) {
arr[x1][i] = arr[x1][i - 1];
ret = min(ret, arr[x1][i]);
}
for (int i = x1; i < x2; i++) {
arr[i][y1] = arr[i + 1][y1];
ret = min(ret, arr[i][y1]);
}
for (int i = y1; i < y2; i++) {
arr[x2][i] = arr[x2][i + 1];
ret = min(ret, arr[x2][i]);
}
for (int i = x2; i > x1 + 1; i--) {
arr[i][y2] = arr[i - 1][y2];
ret = min(ret, arr[i][y2]);
}
arr[x1 + 1][y2] = corner;
answer.push_back(ret);
}
return answer;
}
結果
フィードバック
これは間違いやすい問題で、インデックスの配置をよく考えるべきです.
Reference
この問題について([プログラマ]マトリクスの枠線を回転), 我々は、より多くの情報をここで見つけました
https://velog.io/@bestcoders/프로그래머스-행렬-테두리-회전하기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
指定された座標を2つの頂点として長方形を描く場合、長方形の4つのエッジが通る座標を基準にして、時計回りに1つの値を1つずつ移動します.
長方形の右上隅の値(x 1,y 2)を格納し、上、左、下、右の順に時計回りに1マス移動し、最後に保存した値を代入する(x 1+1,y 2).
コード#コード# #include <string>
#include <vector>
using namespace std;
vector<int> solution(int rows, int columns, vector<vector<int>> queries) {
vector<int> answer;
int arr[101][101];
int num = 1;
for (int i = 1; i <= rows; i++) {
for (int j = 1; j <= columns; j++) {
arr[i][j] = num++;
}
}
for (auto q : queries) {
int x1 = q[0], y1 = q[1], x2 = q[2], y2 = q[3];
int corner = arr[x1][y2];
int ret = corner;
for (int i = y2; i > y1; i--) {
arr[x1][i] = arr[x1][i - 1];
ret = min(ret, arr[x1][i]);
}
for (int i = x1; i < x2; i++) {
arr[i][y1] = arr[i + 1][y1];
ret = min(ret, arr[i][y1]);
}
for (int i = y1; i < y2; i++) {
arr[x2][i] = arr[x2][i + 1];
ret = min(ret, arr[x2][i]);
}
for (int i = x2; i > x1 + 1; i--) {
arr[i][y2] = arr[i - 1][y2];
ret = min(ret, arr[i][y2]);
}
arr[x1 + 1][y2] = corner;
answer.push_back(ret);
}
return answer;
}
結果
フィードバック
これは間違いやすい問題で、インデックスの配置をよく考えるべきです.
Reference
この問題について([プログラマ]マトリクスの枠線を回転), 我々は、より多くの情報をここで見つけました
https://velog.io/@bestcoders/프로그래머스-행렬-테두리-회전하기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
#include <string>
#include <vector>
using namespace std;
vector<int> solution(int rows, int columns, vector<vector<int>> queries) {
vector<int> answer;
int arr[101][101];
int num = 1;
for (int i = 1; i <= rows; i++) {
for (int j = 1; j <= columns; j++) {
arr[i][j] = num++;
}
}
for (auto q : queries) {
int x1 = q[0], y1 = q[1], x2 = q[2], y2 = q[3];
int corner = arr[x1][y2];
int ret = corner;
for (int i = y2; i > y1; i--) {
arr[x1][i] = arr[x1][i - 1];
ret = min(ret, arr[x1][i]);
}
for (int i = x1; i < x2; i++) {
arr[i][y1] = arr[i + 1][y1];
ret = min(ret, arr[i][y1]);
}
for (int i = y1; i < y2; i++) {
arr[x2][i] = arr[x2][i + 1];
ret = min(ret, arr[x2][i]);
}
for (int i = x2; i > x1 + 1; i--) {
arr[i][y2] = arr[i - 1][y2];
ret = min(ret, arr[i][y2]);
}
arr[x1 + 1][y2] = corner;
answer.push_back(ret);
}
return answer;
}
フィードバック
これは間違いやすい問題で、インデックスの配置をよく考えるべきです.
Reference
この問題について([プログラマ]マトリクスの枠線を回転), 我々は、より多くの情報をここで見つけました
https://velog.io/@bestcoders/프로그래머스-행렬-테두리-회전하기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について([プログラマ]マトリクスの枠線を回転), 我々は、より多くの情報をここで見つけました https://velog.io/@bestcoders/프로그래머스-행렬-테두리-회전하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol