[Programmers] 행렬 테두리 회전하기
2023. 9. 13. 13:45ㆍComputer Sciences/Problem Solve
https://school.programmers.co.kr/learn/courses/30/lessons/77485
문제 설명
배열을 다루는 능력을 시험하는 구현 문제이다. 알고리즘은 크게 없이 주어진 조건대로 구현하면 된다.
코드
class Solution {
public int[] solution(int rows, int columns, int[][] queries) {
int[] answer = new int[queries.length];
int[][] matrix = new int[rows][columns];
init(matrix);
for (int attempt = 0; attempt < queries.length; attempt++) {
int[] query = queries[attempt];
int startX = query[0] - 1;
int startY = query[1] - 1;
int endX = query[2] - 1;
int endY = query[3] - 1;
int min = matrix[startX][startY];
int prev = matrix[startX][startY];
int tmp = 0;
for (int col = startY; col < endY; col++) {
tmp = matrix[startX][col + 1];
matrix[startX][col + 1] = prev;
prev = tmp;
min = Math.min(min, prev);
}
for (int row = startX; row < endX; row++) {
tmp = matrix[row + 1][endY];
matrix[row + 1][endY] = prev;
prev = tmp;
min = Math.min(min, prev);
}
for (int col = endY; col > startY; col--) {
tmp = matrix[endX][col - 1];
matrix[endX][col - 1] = prev;
prev = tmp;
min = Math.min(min, prev);
}
for (int row = endX; row > startX; row--) {
tmp = matrix[row - 1][startY];
matrix[row - 1][startY] = prev;
prev = tmp;
min = Math.min(min, prev);
}
answer[attempt] = min;
}
return answer;
}
private void init(int[][] matrix) {
int num = 1;
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[0].length; j++) {
matrix[i][j] = num++;
}
}
}
}
'Computer Sciences > Problem Solve' 카테고리의 다른 글
[Programmers] 숫자 짝꿍 (0) | 2023.09.14 |
---|---|
[Programmers] 대충 만든 자판 (0) | 2023.09.14 |
[Programmers] 정수 삼각형 (0) | 2023.09.12 |
[Programmers] 무인도 여행 (0) | 2023.09.12 |
[Programmers] 2개 이하로 다른 비트 (0) | 2023.09.12 |