[BOJ 16926] 배열 돌리기1
업데이트:
문제
- BOJ 16926
- 문제의 저작권은 Baekjoon Online Judge에 있습니다.
접근방식
라인별로 가장 왼쪽 상단 좌표를 tmp
에 임시로 저장하고 여기 부터 채워주기 위해서 반시계방향으로 방향 하나씩 for문을 돌려주면서 이동시켰다. 바로 이동시켜주면 되므로 따로 저장할 배열을 만들어줄 필요가 없었다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
static int N, M, R;
static int[][] map;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
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());
}
}//End input
int cnt = Math.min(N, M)/2; //라인 개수
for(int i=0; i<R; i++) {
for(int j=0; j<cnt; j++) {
int tmp = map[j][j]; //현재 라인 가장 왼쪽상단 값 임시저장
//반시계방향으로 한칸씩 이동(좌우상하)
for(int k=j+1; k<M-j; k++) {
map[j][k-1] = map[j][k];
}
for(int k=j+1; k<N-j; k++) {
map[k-1][M-j-1] = map[k][M-j-1];
}
for(int k=M-j-2; k>=j; k--) {
map[N-j-1][k+1] = map[N-j-1][k];
}
for(int k=N-j-2; k>=j; k--) {
map[k+1][j] = map[k][j];
}
map[j+1][j] = tmp;
}
}
for(int i=0; i<N; i++) {
for(int j=0; j<M; j++) {
bw.write(map[i][j]+" ");
}
bw.newLine();
}
bw.flush();
bw.close();
}
}