hye-log

[백준]16926번 배열 돌리기1(JAVA) 본문

CodingTest/Baekjoon

[백준]16926번 배열 돌리기1(JAVA)

iihye_ 2023. 8. 10. 02:06

0. 문제 링크

https://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

 

1. 문제 설명

1) N*M 배열을 반시계 방향으로 돌리기

 

2. 입출력

// input
4 4 2
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

// output
3 4 8 12
2 11 10 16
1 7 6 15
5 9 13 14

 

3. 코드

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

public class b16926 {

	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[][] 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());
			}
		}
		
		for (int r = 0; r < R; r++) {
			int rmin = 0;
			int cmin = 0;
			int rmax = N-1;
			int cmax = M-1;
			
			while(true) {
				if(rmin >= N/2 || cmin >= M/2) break;
				
				int temp = map[rmin][cmin]; // 첫자리
				for (int i = cmin; i < cmax; i++) { // 왼쪽으로
					map[rmin][i] = map[rmin][i+1];
				}
				for (int i = rmin; i < rmax; i++) { // 위로
					map[i][cmax] = map[i+1][cmax];
				}
				for (int i = cmax; i > cmin; i--) { // 오른쪽으로
					map[rmax][i] = map[rmax][i-1];
				}
				for (int i = rmax; i > rmin; i--) { // 아래로
					map[i][cmin] = map[i-1][cmin];
				}
				map[rmin+1][cmin] = temp; // 빈자리

				rmin++;
				cmin++;
				rmax--;
				cmax--;
			}
		}
	
		print(map);
		
	}
	
	static void print(int[][] map) {
		for (int i = 0; i < map.length; i++) {
			for (int j = 0; j < map[0].length; j++) {
				System.out.print(map[i][j] + " ");
			}
			System.out.println();
		}
	}
}

 

실행 결과

 

4. 회고

1) (0,0), (1,1), ... 를 첫 자리라고 정의

2) 첫 자리를 제외한 나머지 열, 행의 값을 왼쪽, 위, 오른쪽, 아래로 옮김

3) 첫 자리 값 (i + 1, j)에 넣기

4) rmin, rmax, cmin, cmax를 조절하며 반복문을 실행함

 

5. Github

https://github.com/iihye/Algorithm/blob/main/Baekjoon/b16926.java

 

728x90

'CodingTest > Baekjoon' 카테고리의 다른 글

[백준]12100번 2048 (Easy)(JAVA)  (0) 2023.08.11
[백준]16935 배열 돌리기3(JAVA)  (0) 2023.08.10
[백준]7576번 토마토(JAVA)  (0) 2023.08.10
[백준]4963번 섬의 개수(JAVA)  (0) 2023.08.10
[백준]1012번 유기농 배추(JAVA)  (0) 2023.08.09
Comments