프로그래머스
프로그래머스) 행렬 테두리 회전하기 자바
산도리
2025. 1. 13. 15:20
문제
https://school.programmers.co.kr/learn/courses/30/lessons/77485?language=java
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
정답
특별한 알고리즘 없이 조건에 맞게 구현을 해주면 되는 문제이다.
회전을 어떻게 시계방향으로 줄지 여부를 파악하여 풀면 된다.
필자는 회전하는 값들을 배열에 담아 sorting 후 첫 번째 값을 answer 배열에 넣어주었다.
import java.util.ArrayList;
import java.util.Collections;
class Solution {
static int[][] matrix ;
static int cL;
public static 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] = i*columns + j + 1;
}
}
for (int i = 0 ; i < queries.length; i++){
answer[i] = rotate(queries[i]);
}
return answer;
}
public static int rotate(int[]query){
ArrayList<Integer> arrayList = new ArrayList<>();
cL = matrix[query[0]-1][query[1]-1];
for (int i = 1 ; i <= query[3]-query[1] ; i++){
int tmp = matrix[query[0]-1][query[1]+i-1];
arrayList.add(tmp);
matrix[query[0]-1][query[1]+i-1] = cL;
cL = tmp;
}
for (int i = 1 ; i <= query[2]-query[0]; i++){
int tmp = matrix[query[0]-1+i][query[3]-1];
arrayList.add(tmp);
matrix[query[0]-1+i][query[3]-1] = cL;
cL = tmp;
}
for (int i = query[3]-1; i > query[1]-1; i--){
int tmp = matrix[query[2]-1][i-1];
arrayList.add(tmp);
matrix[query[2]-1][i-1] = cL;
cL = tmp;
}
for (int i = query[2]-1; i > query[0]-1; i--){
int tmp = matrix[i-1][query[1]-1];
arrayList.add(tmp);
matrix[i-1][query[1]-1] = cL;
cL = tmp;
}
Collections.sort(arrayList);
return arrayList.get(0);
}
}