단순 구현 문제이다. 방향벡터(dn, dm)를 순차적으로 잘 정의해놓는 것과 배열의 범위를 신경 써서 구현해야 한다.
또한 시작점을 정할 때 N과 M중 더 작은 것에 범위가 맞춰진다.
import java.io.*;
import java.util.StringTokenizer;
public class Main {
static int[] dn = {1,0,-1,0};
static int[] dm = {0,1,0,-1};
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int R = Integer.parseInt(st.nextToken());
int[][] arr = new int[N][M];
for(int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < M; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
}
} //end input
int min = Math.min(N, M);
for (int i = 0; i < R; i++) { //R만큼 회전
for(int j = 0; j < min/2; j++) {
int sn = j;
int sm = j; //시작점
int idx = 0;
int pre = arr[sn][sm];
int temp = arr[sn][sm]; //다음값
while (true)
{
pre = temp;
int nn = sn+ dn[idx];
int nm = sm + dm[idx];
if (nn < j || nm < j || nn >= N - j || nm >= M - j)
{
idx++;
if (idx == 4) break;
continue;
}
temp = arr[nn][nm];
arr[nn][nm] = pre;
sn = nn;
sm = nm;
}
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if(j == M-1) System.out.print(arr[i][j]);
else System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
'Algorithm > Baekjoon Online Judge' 카테고리의 다른 글
[Java] BOJ1700_멀티탭 스케줄링 (0) | 2021.04.29 |
---|---|
[Java] BOJ1697_숨바꼭질 (0) | 2021.04.29 |
[Java] BOJ16918_봄버맨 (0) | 2021.04.29 |
[Java] BOJ1660_캡틴 이다솜 (0) | 2021.04.23 |
[Java] BOJ16234_인구 이동 (0) | 2021.04.23 |