on
[16935][java][백준]배열 돌리기 3
[16935][java][백준]배열 돌리기 3
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int n,m,r,num;
static int [][] map;
static int [][] tmpMap;
public static void main( String [] args) throws 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());
r = Integer. parseInt (st.nextToken());
map = new int [n][m];
for ( int i = 0 ; i < n; i + + ){
st = new StringTokenizer(br.readLine());
for ( int j = 0 ; j < m; j + + ){
map[i][j] = Integer. parseInt (st.nextToken());
}
}
st = new StringTokenizer(br.readLine());
// 케이스 별로 연산의 수만큼 반복 계산
for ( int i = 0 ; i < r; i + + ){
//케이스 번호
num = Integer. parseInt (st.nextToken());
switch (num){
// 연산 : 배열 상하 반전
case 1 :
one();
break ;
// 2번 연산 : 좌우 반전
case 2 :
two();
break ;
// 3번 연산 : 오른쪽 90도 회전
case 3 :
three();
break ;
// 4번 연산 : 왼쪽 90도 회전
case 4 :
four();
break ;
// 5번 연산 : 4그룹 1->2, 2->3, 3->4, 4->1
case 5 :
five();
break ;
// 6번 연산 : 4그룹 1->4, 4->3, 3->2, 2->1
case 6 :
six();
break ;
}
}
//결과 배열 출력
for ( int i = 0 ; i < n; i + + ){
for ( int j = 0 ; j < m; j + + ){
System . out . print (map[i][j] + " " );
}
System . out . println ();
}
}
/*----------------------------------------------------------*/
public static void one(){
//1번 연산 : 배열 상하 반전
tmpMap = new int [n][m];
for ( int i = 0 ; i < n; i + + ){
for ( int j = 0 ; j < m; j + + ){
tmpMap[n - i - 1 ][j] = map[i][j]; //행만 서로 반대
}
}
map = tmpMap;
}
public static void two(){
//2번 연산 : 좌우 반전
tmpMap = new int [n][m];
for ( int i = 0 ; i < n; i + + ){
for ( int j = 0 ; j < m; j + + ){
tmpMap[i][m - j - 1 ] = map[i][j]; //열만 반대
}
}
map = tmpMap;
}
public static void three(){
//3번 연산 : 오른쪽 90도 회전
tmpMap = new int [m][n];
for ( int i = 0 ; i < n; i + + ){
for ( int j = 0 ; j < m; j + + ){
//System.out.println("i, j : " + i + ", " + j);
//System.out.println(j + ", " + (n-i-1));
tmpMap[j][n - i - 1 ] = map[i][j];
}
}
//배열 바꾸기 => 결과 배열 크기 다르므로
int tmp = n;
n = m;
m = tmp;
map = tmpMap;
}
public static void four(){
//4번 연산 : 왼쪽 90도 회전
tmpMap = new int [m][n];
for ( int i = 0 ; i < n; i + + ){
for ( int j = 0 ; j < m; j + + ){
tmpMap[m - j - 1 ][i] = map[i][j];
}
}
//배열 바꾸기
int tmp = n;
n = m;
m = tmp;
map = tmpMap;
}
public static void five(){
//5번 연산 : 4그룹 1->2, 2->3, 3->4, 4->1
tmpMap = new int [n][m];
for ( int i = 0 ; i < n / 2 ; i + + ){
for ( int j = 0 ; j < m / 2 ; j + + ){
tmpMap[i][m / 2 + j] = map[i][j];
}
}
// 0,4 -> 3,4
for ( int i = 0 ; i < n / 2 ; i + + ){
for ( int j = m / 2 ; j < m; j + + ){
tmpMap[n / 2 + i][j] = map[i][j];
}
}
// 3,4 -> 3,0
for ( int i = n / 2 ; i < n; i + + ){
for ( int j = m / 2 ; j < m; j + + ){
tmpMap[i][j - m / 2 ] = map[i][j];
}
}
// 3,0 -> 0,0
for ( int i = n / 2 ; i < n; i + + ){
for ( int j = 0 ; j < m / 2 ; j + + ){
tmpMap[i - n / 2 ][j] = map[i][j];
}
}
map = tmpMap;
}
public static void six(){
// 4그룹 1->2, 2->3, 3->4, 4->1
//6번 연산 : 4그룹 1->4, 4->3, 3->2, 2->1
tmpMap = new int [n][m];
// 0,0 -> 3,0
for ( int i = 0 ; i < n / 2 ; i + + ){
for ( int j = 0 ; j < m / 2 ; j + + ){
tmpMap[n / 2 + i][j] = map[i][j];
}
}
// 3,0 -> 3,4
for ( int i = n / 2 ; i < n; i + + ){
for ( int j = 0 ; j < m / 2 ; j + + ){
tmpMap[i][j + m / 2 ] = map[i][j];
}
}
// 3,4 -> 0,4
for ( int i = n / 2 ; i < n; i + + ){
for ( int j = m / 2 ; j < m; j + + ){
tmpMap[i - n / 2 ][j] = map[i][j];
}
}
// 0,4 -> 0,0
for ( int i = 0 ; i < n / 2 ; i + + ){
for ( int j = m / 2 ; j < m; j + + ){
tmpMap[i][j - m / 2 ] = map[i][j];
}
}
map = tmpMap;
}
}
from http://eonhwa-theme.tistory.com/29 by ccl(S) rewrite - 2021-10-26 21:02:02