[2021 Dev-Matching] 행렬 테두리 회전하기
2022. 3. 23. 13:53ㆍPS/Programmers
[문제 접근법]
- 실제 2차원 배열에 대한 구현 능력을 물어보는 문제인거 같다. 나는 큐를 활용하여 시계방향으로 배열을 옮기는 로직을 구현 하였다.
맨위 - 오른쪽 - 맨아래 - 맨왼쪽 순으로 배열을 옮기면서 진행하였음
[구현 1]
1. 2차원 행렬을 만든다
2. 위 - 오른쪽 - 아래 - 왼쪽 순으로 배열을 옮기는 과정을 거침(큐에 이전값을 넣어서 배열값을 변경)
3. 그리고 각 변환마다 최소값을 찾는다
import java.util.*;
class Solution {
//2차원 배열 테두리 만들기
public int[][] makeMatrix(int rows, int columns) {
int[][] matrix = new int[rows][columns];
int v = 1;
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
matrix[i][j] = v++;
}
}
return matrix;
}
//시계 방향으로 회전
public int doRotate(int[][] matrix, int x1, int y1, int x2, int y2) {
int min = matrix[x1][y1]; //최소값
int tmp = 0;
Queue<Integer> que=new LinkedList<>();
que.add(matrix[x1][y1]);
//윗줄 옮기기(가로, y축 증가)
for (int y = y1+1; y <= y2; y++) {
if (min > matrix[x1][y])
min = matrix[x1][y];
que.add(matrix[x1][y]);
matrix[x1][y] = que.poll(); //이전 값 넣기
}
//오른쪽 줄 옮기기(세로, x축 증가)
for (int x = x1+1; x <= x2; x++) {
if (min > matrix[x][y2])
min = matrix[x][y2];
que.add(matrix[x][y2]);
matrix[x][y2] = que.poll();
}
//밑 줄 옮기기(가로, y축 감소)
for (int y = y2-1; y >= y1; y--) {
if (min > matrix[x2][y])
min = matrix[x2][y];
que.add(matrix[x2][y]);
matrix[x2][y] = que.poll();
}
//왼쪽 줄 옮기기(세로, x축 감소)
for (int x = x2-1; x >= x1; x--) {
if (min > matrix[x][y1])
min = matrix[x][y1];
que.add(matrix[x][y1]);
matrix[x][y1] = que.poll();
}
return min;
}
public int[] solution(int rows, int columns, int[][] queries) {
int[] answer = new int[queries.length];
//1. 행렬 만들기
int[][] matrix = makeMatrix(rows, columns);
//2. 회전 하기
for (int i = 0; i < queries.length; i++) {
int x1 = queries[i][0] - 1;
int y1 = queries[i][1] - 1;
int x2 = queries[i][2] - 1;
int y2 = queries[i][3] - 1;
answer[i] = doRotate(matrix, x1, y1, x2, y2);
}
return answer;
}
}
반응형
'PS > Programmers' 카테고리의 다른 글
[KAKAO] 오픈채팅방 (0) | 2022.03.30 |
---|---|
[Summer/Winter Coding(~2018)] 스킬트리 (0) | 2022.03.29 |
더 맵게 (0) | 2022.03.24 |
[2021 Dev-Matching] 다단계 칫솔 판매 (0) | 2022.03.23 |
완주하지 못한 선수 (0) | 2022.03.23 |