티스토리 뷰

16926. 배열 돌리기1

www.acmicpc.net/problem/16926

 

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

 

배열을 돌리면서 이동시키려는 값을 새 위치에 넣을 때, 새로운 배열을 생성하여 복사해주게 되면 -> 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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함