[java][boj][s2] 16926. 배열 돌리기 1
728x90
 

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

문제

크기가 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]
   ↓         ↓                   ↑         ↑
A[3][1]   A[3][2] → A[3][3] → A[3][4]   A[3][5]
   ↓                                       ↑
A[4][1] → A[4][2] → A[4][3] → A[4][4] → A[4][5]

예를 들어, 아래와 같은 배열을 2번 회전시키면 다음과 같이 변하게 된다.

1 2 3 4       2 3 4 8       3 4 8 6
5 6 7 8       1 7 7 6       2 7 8 2
9 8 7 6   →   5 6 8 2   →   1 7 6 3
5 4 3 2       9 5 4 3       5 9 5 4
 <시작>         <회전1>        <회전2>

배열과 정수 R이 주어졌을 때, 배열을 R번 회전시킨 결과를 구해보자.

입력

첫째 줄에 배열의 크기 N, M과 수행해야 하는 회전의 수 R이 주어진다.

둘째 줄부터 N개의 줄에 배열 A의 원소 Aij가 주어진다.

출력

입력으로 주어진 배열을 R번 회전시킨 결과를 출력한다.

풀이

/*
 * 1. 배열의 크기 N M 수행해야 하는 회전의 수 R(한칸씩)
 * 2. N개의 줄에 배열 A의 원소
 * 3. 시계 반대방향으로 회전(안쪽도 회전)
 */

 

코드

package com.ssafy.boj;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class S2_16926_배열돌리기1 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		StringTokenizer st = new StringTokenizer(br.readLine());
		int N = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken());
		int R = Integer.parseInt(st.nextToken());
		
		int[][] arr = new int[N][M];
		
		for(int i=0; i<N; i++) {
			st = new StringTokenizer(br.readLine());
			for(int j=0; j<M; j++) {
				arr[i][j] = Integer.parseInt(st.nextToken());
			}
		} // arr 만들기
		
		for(int rc=0; rc<R; rc++) { //회전 횟수만큼 반복	
			
			int count = Math.min(N, M) / 2; //라인이 가장 긴 변/2 - 1만큼 돌아감
			
			for(int i=0; i<count; i++) {
				int num = arr[i][i];
				
				for(int j=i+1; j<M-i; j++) // 위쪽 줄 왼쪽으로
					arr[i][j-1] = arr[i][j];
				
				for(int j=i+1; j<N-i; j++) // 오른쪽 줄 위로
					arr[j-1][M-1-i] = arr[j][M-1-i];
				
				for(int j=M-2-i; j>=i; j--) // 아래 줄 오른쪽으로
					arr[N-1-i][j+1] = arr[N-1-i][j];
				 
				for(int j=N-2-i; j>=i; j--) // 왼쪽 줄 아래로
					arr[j+1][i] = arr[j][i];
				
				arr[i+1][i] = num;
			}
		}
		
		for(int i=0; i<N; i++) {
			for(int j=0; j<M; j++) {
				System.out.print(arr[i][j] + " ");
			}
			System.out.println();
		}
	}
}

결과

 

#자바 #java #boj #백준 #알고리즘

728x90