Algorithm/백준 알고리즘

백준_16926 배열 돌리기1(자바)

미스터로즈 2021. 4. 3. 11:43

시간 & 메모리 제한

문제

입력 & 출력

문제 풀이

package com.Back;

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

public class Back_16926 {

	// 우 하 좌 상
	static int[] dx = { 0, 1, 0, -1 };
	static int[] dy = { 1, 0, -1, 0 };

	public static void main(String[] args) throws Exception {
		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 rotate = Integer.parseInt(st.nextToken());
		int[][] map = new int[N][M];

		// 값 받아오기
		for (int i = 0; i < N; i++) {
			st = new StringTokenizer(br.readLine());
			for (int j = 0; j < M; j++) {
				map[i][j] = Integer.parseInt(st.nextToken());
			}
		}

		int rotaGroup = N > M ? M : N;

		for (int i = 0; i < rotate; i++) {
			for (int j = 0; j < rotaGroup / 2; j++) {
				int x = j;
				int y = j;

				int temp = map[x][y];

				int dir = 0;
				while (dir < 4) {
					int xx = x + dx[dir];
					int yy = y + dy[dir];
					if(xx>=j && xx<N-j && yy>=j && yy<M-j) {
						map[x][y] = map[xx][yy];
						x = xx;
						y = yy;
					}else {
						dir++;
					}
				}
				map[j+1][j] = temp;
			}
		}

		for (int i = 0; i < N; i++) {
			for (int j = 0; j < M; j++) {
				System.out.print(map[i][j]+" ");
			}
			System.out.println();
		}
	}
}

Step1. 입력값을 받습니다.

 

Step2. for문을 통해서 값을 미뤄주는 계획을 세웁니다.

 

Step3. 값을 미뤄줄때는 방향을 잡고, 차례로 밀어주면 됩니다.

 

Step4. 마지막 출력을 해주면 끝이 납니다.

 

단순한 방향을 지정해서 푸는 수학 문제와 가깝다....