<<내가 생각한 최적화 방안>>
회전 횟수가 한바퀴를 넘어가는 경우, 일일이 다 도는 것이 아니라, 회전횟수 % 한바퀴 회전 횟수 의 값을 회전 횟수로 지정한다!!
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int[][] s;
static int N,M,K;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st=new StringTokenizer(br.readLine());
N=Integer.parseInt(st.nextToken());
M=Integer.parseInt(st.nextToken());
K=Integer.parseInt(st.nextToken());
s=new int[N][M];
for(int i=0;i<N;i++) {
StringTokenizer st2=new StringTokenizer(br.readLine());
for(int j=0;j<M;j++) {
s[i][j]=Integer.parseInt(st2.nextToken());
}
}
int minn=Math.min(N/2, M/2);
int ma=Math.max(N,M);
int mi=Math.min(N,M);
for(int i=0;i<minn;i++) {
int count=2*(ma-i*2)+2*Math.max(0,(mi-(i+1)*2)); //한바퀴 회전 횟수
for(int j=0;j<K%count;j++)
rotate(i);
}
print();
}
static void rotate(int x) {
int temp=s[x][x];
for(int i=x;i<M-1-x;i++) {
s[x][i]=s[x][i+1];
}
for(int i=x;i<N-1-x;i++) {
s[i][M-1-x]=s[i+1][M-1-x];
}
for(int i=M-1-x;i>x;i--) {
s[N-1-x][i] =s[N-1-x][i-1];
}
for(int i=N-1-x;i>x;i--) {
s[i][x]=s[i-1][x];
}
s[1+x][x]=temp;
}
static void print() {
for(int[] ss: s) {
for(int sss: ss)System.out.print(sss+" ");
System.out.println();
}
}
}
'코테 공부' 카테고리의 다른 글
[SWEA] 사칙연산 유효성 검사(1233번, 자바) (0) | 2023.02.15 |
---|---|
링크와 스타트(백준 15661번)☆ (0) | 2023.02.15 |
배열 돌리기 1(백준 16926번, 자바) (0) | 2023.02.15 |
[SWEX] 암호문1(1228번, 자바)☆ (0) | 2023.02.14 |
[BFS] 윌리암슨수액빨이딱따구리가 정보섬에 올라온 이유( 백준 17129번, 자바) (0) | 2023.02.10 |