본문 바로가기

Algorithm/Baekjoon Online Judge

[Java] BOJ16926_배열 돌리기 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


단순 구현 문제이다. 방향벡터(dn, dm)를 순차적으로 잘 정의해놓는 것과 배열의 범위를 신경 써서 구현해야 한다.

 

또한 시작점을 정할 때 N과 M중 더 작은 것에 범위가 맞춰진다.

 

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

public class Main {

	static int[] dn = {1,0,-1,0};
	static int[] dm = {0,1,0,-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());
			}
		}  //end input
		int min = Math.min(N, M);
		for (int i = 0; i < R; i++) {  //R만큼 회전
			for(int j = 0; j < min/2; j++) {
				int sn = j;
				int sm = j; //시작점

				int idx = 0;
				int pre = arr[sn][sm];
				int temp = arr[sn][sm];  //다음값
				while (true)
				{
					pre = temp;
					int nn = sn+ dn[idx];
					int nm = sm + dm[idx];

					if (nn < j || nm < j || nn >= N - j || nm >= M - j)
					{
						idx++;
						if (idx == 4) break;
						continue;
					}
					temp = arr[nn][nm];
					arr[nn][nm] = pre;
					
					sn = nn;
					sm = nm;
				}
			}
		}
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < M; j++) {
				if(j == M-1) System.out.print(arr[i][j]);
				else System.out.print(arr[i][j] + " ");
			}
			System.out.println();
		}
	}

}

'Algorithm > Baekjoon Online Judge' 카테고리의 다른 글

[Java] BOJ1700_멀티탭 스케줄링  (0) 2021.04.29
[Java] BOJ1697_숨바꼭질  (0) 2021.04.29
[Java] BOJ16918_봄버맨  (0) 2021.04.29
[Java] BOJ1660_캡틴 이다솜  (0) 2021.04.23
[Java] BOJ16234_인구 이동  (0) 2021.04.23