📍 문제 설명
💡 접근
문제에서 주어진대로 구현했다.
타 블로그는 방향을 설정하여 범위를 벗어났을 때 방향을 전환해주는 식으로 작성했는데 이렇게 푸는 방식이 문제의 의도에 좀 더 부합한 답인듯하다.
👩💻 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static int n, m, v, e, k, r, answer, cnt;
static int[] arr;
static long[] dp;
static int[][] board, result;
static boolean[][] visited;
static int[] dx = {-1,1,0,0};
static int[] dy = {0,0,-1,1};
static ArrayList<Integer> list;
static StringBuilder sb;
static Queue<Integer> q;
public static void main(String[] args) throws IOException {
Main T = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
r = Integer.parseInt(st.nextToken());
board = new int[n+1][m+1];
result = new int[n+1][m+1];
for(int i = 1; i <= n; i++) {
st = new StringTokenizer(br.readLine());
for(int j = 1; j <= m; j++) {
board[i][j] = Integer.parseInt(st.nextToken());
}
}
sb = new StringBuilder();
T.solution();
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++){
sb.append(board[i][j] + " ");
}
sb.append("\n");
}
System.out.println(sb);
}
private void solution() {
for (int tc = 0; tc < r; tc++) {
int[][] result = new int[n + 1][m + 1];//4 5
int startX = 1;
int startY = 1;
int endX = n;
int endY = m;
while (startX < endX && startY < endY) {
//left, right
for (int i = startX; i < endY; i++) {
result[startX][i] = board[startX][i + 1];
result[endX][i + 1] = board[endX][i];
}
//down
for (int i = startX; i < endX; i++) {
result[i + 1][startX] = board[i][startX];
}
//up
for (int i = endX - 1; i >= startX; i--) {
result[i][endY] = board[i + 1][endY];
}
startX++;
startY++;
endX--;
endY--;
}
board = result;
}
}
private static class Point implements Comparable<Point> {
private int x;
private int y;
private int crush;
public Point(int x, int y, int crush) {
this.x = x;
this.y = y;
this.crush = crush;
}
@Override
public String toString() {
return "Point{" +
"x=" + x +
", y=" + y +
", crush=" + crush +
'}';
}
@Override
public int compareTo(Point o) {
return this.crush - o.crush;
}
}
}