백준 Siver1 16926 - 배열 돌리기1

JH·2022년 10월 7일
0

백준 알고리즘

목록 보기
23/29
post-thumbnail

문제

입력

출력

예제

idea

처음에는 각각 따로따로 돌려주려고 했는데 실패했다.
그래서 곰곰히 고민을 해본 결과 규칙이 보였다.
아래 왼쪽 위 오른쪽으로 네번의 이동이 있었고
양 끝에서 한칸씩 줄어드는것을 알 수 있었다.

Code

import java.util.*;
import java.io.*;

public class test {
	
	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		StringBuilder sb = new StringBuilder();

		int N = Integer.parseInt(st.nextToken());
		int M = Integer.parseInt(st.nextToken());
		int num = Integer.parseInt(st.nextToken());
		int array[][] = new int[N][M];

		int answer[][] = new int[N][M];

		for (int i = 0; i < N; i++) {
			st = new StringTokenizer(br.readLine());
			for (int j = 0; j < M; j++) {
				array[i][j] = Integer.parseInt(st.nextToken());
			}
		}
		for(int i=0;i<num;i++) {
			turn(array,answer,N,M);
		}
		for(int i=0;i<N;i++) {
			for (int j = 0; j < M; j++) {
				sb.append(array[i][j]).append(" ");
			}
			sb.append("\n");
		}
		System.out.println(sb);
	}	

	public static void turn(int array[][], int answer[][], int N, int M) {
		int k=0;
		while ((Math.min(N, M)/2) > k) {
			for (int i = k; i < N - k - 1; i++) {
				answer[i + 1][k] = array[i][k];
			}
			for (int i = k; i < M - k - 1; i++) {
				answer[N - k - 1][i + 1] = array[N - k - 1][i];
			}
			for (int i = N - k - 1; i > k; i--) {
				answer[i - 1][M - k - 1] = array[i][M - k - 1];
			}
			for (int i = M - k - 1; i > k; i--) {
				answer[k][i - 1] = array[k][i];
			}
			k++;
		}
		for(int i=0;i<N;i++) {
			for (int j = 0; j < M; j++) {
				array[i][j]=answer[i][j];
			}
		}

	}
}

결과

0개의 댓글