알고리즘/카카오
[프로그래머스] 행렬 테두리 회전하기
BSHwan
2022. 8. 15. 20:19
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/77485
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
public class Solution {
static int[][] map;
static ArrayList<Integer> list = new ArrayList();
public static int[] solution(int rows, int columns, int[][] queries) {
int[] answer = new int[queries.length];
map = new int[rows][columns];
int n = 1;
for(int i=0; i<rows; i++) {
for(int j=0; j<columns; j++) {
map[i][j] = n++;
}
}
for(int t=0; t<queries.length; t++) {
list.clear();
int x1 = queries[t][0]-1;
int y1 = queries[t][1]-1;
int x2 = queries[t][2]-1;
int y2 = queries[t][3]-1;
// 1. 윗 부분 돌리기
int a = map[x1][y2];
list.add(a);
for(int j=y2; j>y1; j--) {
map[x1][j] = map[x1][j-1];
list.add(map[x1][j]);
}
// 2. 오른쪽 부분 돌리기
int b = map[x2][y2];
list.add(b);
for(int i=x2; i>x1+1; i--) {
map[i][y2] = map[i-1][y2];
list.add(map[i][y2]);
}
map[x1+1][y2] = a;
// 3. 아래 부분 돌리기
a = map[x2][y1];
list.add(a);
for(int j=y1; j<y2-1; j++) {
map[x2][j] = map[x2][j+1];
list.add(map[x2][j]);
}
map[x2][y2-1] = b;
// 4. 왼쪽 부분 돌리기
for(int i=x1; i<x2-1; i++) {
map[i][y1] = map[i+1][y1];
list.add(map[i][y1]);
}
map[x2-1][y1] = a;
Collections.sort(list);
answer[t] = list.get(0);
}
return answer;
}
}
반응형