-
[백준 16926] 배열 돌리기PS/Java 2021. 3. 9.
import java.util.Scanner; public class 배열돌리기1 { private static int[][] arr; private static int n; private static int m; private static int r; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); n = scanner.nextInt(); m = scanner.nextInt(); r = scanner.nextInt(); arr = new int[n][m]; for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { arr[i][j] = scanner.nextInt(); } } while(r > 0) { rotate(0); r--; } for(int i = 0; i < n; i++) { for(int j = 0; j < m; j++) { System.out.print(arr[i][j] + " "); } System.out.println(); } } public static void rotate(int a) { int k = Math.min(m, n); if(a == k / 2) { return; } int temp = arr[a][a]; int i = a, j = a; arr[i][j] = temp; for(; j < m - a - 1; j++) { arr[i][j] = arr[i][j + 1]; } for(; i < n - a - 1; i++) { arr[i][j] = arr[i + 1][j]; } for(; j > a; j--) { arr[i][j] = arr[i][j - 1]; } for(; i > a; i--) { arr[i][j] = arr[i - 1][j]; } arr[i + 1][j] = temp; rotate(a + 1); } }
달팽이 문제의 응용버전이며 재귀함수를 이용하였다.
i, j값이 어떻게 변화하는지 잘 파악한다.
'PS > Java' 카테고리의 다른 글
[백준] 1158번: 요세푸스 문제 (0) 2021.03.09 [백준 2164] 카드2 (0) 2021.03.09 [백준 17478] 재귀함수가 뭔가요? (0) 2021.03.09 [백준 1244] 스위치 켜고 끄기 (0) 2021.03.09 [백준 2961] 도영이가 만든 맛있는 음식 (0) 2021.03.09