프로그래머스 - 행렬 테두리 회전하기
해당 문제는 start X, Y 좌표 및 end X,Y좌표를 통해 시계방향으로 회전 시키도록 하면서 회전하는 값들의 최소값을 구했습니다. 다른 공식이 있느지는 모르겠지만 입력받은 각 x1,y1, x2,y2 좌표를 통해 사각형 테두리 좌표를 각각 구할 수 있었고,
(x1, y1) -> (x1, y2), (x1, y2) -> (x2, y2), (x2, y2) -> (x2, y1), (x2,y1) -> (x1,y1) 순으로 각 좌표의 값들을 해당 방향으로 움직마지막 값은 temp에 넣은후 다음 방향의 첫번째 값으로 셋팅하면서 움직이게 하는 식으로 구현했습니다. 값을 움직이게 하기 위해 모든 대상 좌표를 방문하므로 그 값들의 최소값을 return 했습니다.
public int[] solution(int rows, int columns, int[][] queries) {
int[] answer = new int[queries.length];
int[][] 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], matrix);
}
return answer;
}
private int rotate(int[] query, int[][] matrix) {
int startX = query[0] - 1;
int startY = query[1] - 1;
int endX = query[2] - 1;
int endY = query[3] - 1;
int temp = matrix[startX][startY];
int min = temp;
for (int i = startY + 1; i < endY; i++) {
int temp1 = matrix[startX][i];
matrix[startX][i] = temp;
temp = temp1;
min = Math.min(min, temp);
}
for (int i = startX; i < endX; i++) {
int temp1 = matrix[i][endY];
matrix[i][endY]= temp;
temp = temp1;
min = Math.min(min, temp);
}
for(int i = endY; i > startY; i--) {
int temp1 = matrix[endX][i];
matrix[endX][i] = temp;
temp = temp1;
min = Math.min(min, temp);
}
for(int i = endX; i >= startX; i--) {
int temp1 = matrix[i][startY];
matrix[i][startY]= temp;
temp = temp1;
min = Math.min(min, temp);
}
return min;
}
'정리 > 알고리즘' 카테고리의 다른 글
프로그래머스 - 카카오 프렌즈 컬러링북 (0) | 2022.05.13 |
---|---|
프로그래머스 - 다트 게임 (0) | 2022.05.02 |
프로그래머스 - 삼진법 뒤집기 (0) | 2022.04.20 |
프로그래머스 - 약수의 개수와 덧셈 (0) | 2022.04.19 |
프로그래머스 - 소수만들기 (0) | 2022.04.18 |
댓글