티스토리 뷰
16926. 배열 돌리기1
배열을 돌리면서 이동시키려는 값을 새 위치에 넣을 때, 새로운 배열을 생성하여 복사해주게 되면 -> min(N,M)의 값이 홀수인 경우 맨 가운데 값이 복사되지 않는 문제가 발생한다.
따라서 복사하면서 이동하는 것이 아닌.
새 위치의 값을 이전 위치로 넣어주는 방식으로 바구었다.
import java.io.*;
import java.util.*;
//210210
public class Main_BJ_16926_배열돌리기1 {
static int N, M, R;
static int[][] arr;
static int[] dr = {0, 1, 0, -1};
static int[] dc = {1, 0, -1, 0};
static StringBuilder sb = new StringBuilder();
static void printArr() {
for(int r=0; r<N; r++) {
for(int c=0; c<M; c++) {
sb.append(arr[r][c] + " ");
}
sb.append("\n");
}
System.out.println(sb.toString());
}
static void rotate() {
for(int s=0; s<Math.min(N, M)/2; s++) {
int sr = s;
int sc = s;
int startValue = arr[sr][sc];
int d = 0;
while(d < 4) {
int nr = sr + dr[d];
int nc = sc + dc[d];
// 범위 안에 있으면
if (nr>=s && nr<(N-s) && nc>=s && nc<(M-s)) {
arr[sr][sc] = arr[nr][nc];
sr = nr;
sc = nc;
} else {
d++;
}
}
arr[s+1][s] = startValue;
}
}
public static void main(String[] args) throws Exception {
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());
arr = new int[N][M];
for(int r=0; r<N; r++) {
st = new StringTokenizer(br.readLine(), " ");
for(int c=0; c<M; c++) {
arr[r][c] = Integer.parseInt(st.nextToken());
}
}
for(int ri=0; ri<R; ri++) {
rotate();
}
printArr();
br.close();
}
}
'코딩테스트 > 백준' 카테고리의 다른 글
[BJ] 10872. 팩토리얼 (0) | 2021.02.14 |
---|---|
[BJ] 16935. 배열 돌리기 3 (0) | 2021.02.11 |
[BJ] 2577. 숫자의 개수 (0) | 2021.02.09 |
[BJ] 2563. 색종이 (0) | 2021.02.09 |
[BJ] 1158. 요세푸스 문제 (0) | 2021.02.09 |
댓글