https://www.acmicpc.net/problem/16927
16927번: 배열 돌리기 2
크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다. A[1][1] ← A[1][2] ← A[1][3] ← A[1][4] ← A[1][5] ↓ ↑ A[2][1] A[2][2] ← A[2][3] ← A[2][4] A[2][5]
www.acmicpc.net
흠 조금 시간이 걸렸네요
키포인트는
명령횟수가 10^9이어서 시간초과가 발생합니다. 그래서 회전의 경우 원복되는 상황은 그대로인걸 감안해서 %를 이용해서 횟수를 줄이면됩니다.
키포인트:
int parms = (2 * (n - 2 * i) + 2 * (m - 2 * i) - 4);
int rotations = k % parms;
package test01;
import java.util.*;
import java.lang.*;
import java.io.*;
public class Main {
public static int[][] maps;
public static int[][] copymaps;
public static int n, m, k;
public static void prtints(int[][] maps, int n, int m) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
System.out.print(maps[i][j] + " ");
}
System.out.println();
}
}
public static void rotation(int startr, int endr, int startc, int endc) {
// top
for (int i = startc + 1; i <= endc; i++) {
copymaps[startr][i - 1] = maps[startr][i];
}
// left
for (int i = startr; i < endr; i++) {
copymaps[i + 1][startc] = maps[i][startc];
}
// right
for (int i = startr + 1; i <= endr; i++) {
copymaps[i - 1][endc] = maps[i][endc];
}
// bottom
for (int i = startc; i < endc; i++) {
copymaps[endr][i + 1] = maps[endr][i];
}
for (int i = startr; i <= endr; i++) {
for (int j = startc; j <= endc; j++) {
maps[i][j] = copymaps[i][j];
}
}
}
public static void main(String[] args) throws Exception {
Scanner scan = new Scanner(System.in);
n = scan.nextInt();
m = scan.nextInt();
k = scan.nextInt();
maps = new int[n][m];
copymaps = new int[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
int tmp = scan.nextInt();
maps[i][j] = tmp;
copymaps[i][j] = tmp;
}
}
int ci = Math.min(n, m) / 2;
for (int i = 0; i < ci; i++) {
int parms = (2 * (n - 2 * i) + 2 * (m - 2 * i) - 4);
int rotations = k % parms;
for (int t = 0; t < rotations; t++) {
rotation(i, n - 1 - i, i, m - 1 - i);
}
}
prtints(maps, n, m);
}
}
'알고리즘 공부' 카테고리의 다른 글
백준 마법사 상어와 토네이도 (0) | 2024.04.02 |
---|---|
백준 최소 회의실 개수 (0) | 2024.04.02 |
백준 0 만들기 (1) | 2024.04.01 |
백준 로봇 시뮬레이션 (1) | 2024.04.01 |
백준 -탑 (0) | 2024.03.30 |