코테 공부

배열 돌리기 1(백준 16926번, 자바)

DaEun_ 2023. 2. 15. 08:39

 

16926번: 배열 돌리기 1 (acmicpc.net)

 

16926번: 배열 돌리기 1

크기가 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

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); //회전 사각형  개수 
		
		for(int j=0;j<K;j++) {
			for(int i=0;i<minn;i++) {
				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();
		}
	}
}