반응형
🅰 백준 16926. 배열 돌리기1
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
✏️ 문제 풀이
- 먼저 배열이 주어졌을 때 돌려야 하는 배열의 개수를 구하는 것이 중요했다.
- 가로와 세로 중 최소값 / 2만큼 배열을 회전 시켜야한다.
- rotate함수를 이용하여 4가지 방향으로 회전을 시켜주었다.
✏️ 소스코드
package _0811;
import java.util.Scanner;
public class Main_실버3_16926_손은성 {
public static int arr2[][];
static int N, M, R,N1,M1;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
N1 = N;
M = sc.nextInt();
M1 = M;
R = sc.nextInt();
arr2 = new int[N + 1][M + 1];
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= M; j++) {
arr2[i][j] = sc.nextInt();
}
}
int r = Math.min(N, M) / 2; // 돌려야 하는 배열의 개수
rotate(r);
for (int i = 1; i <= N1; i++) {
for (int j = 1; j <= M1; j++) {
System.out.print(arr2[i][j] + " ");
}
System.out.println();
}
}
static void rotate(int r) {
for (int t = 0; t < R; t++) { // R만큼 회전
for (int n = 1; n <= r; n++) { // 돌려야 하는 배열의 개수만큼 한번씩 회전
int temp = arr2[n][n];
for (int i = n; i < M; i++) { // (n,M -> n,n) 열 -1 이동
arr2[n][i] = arr2[n][i + 1];
}
for (int i = n; i < N; i++) { // (N,M -> 1,M) 행 -1 이동
arr2[i][M] = arr2[i + 1][M];
}
for (int i = M; i > n; i--) { // (N,1 -> N,M) 열 +1 이동
arr2[N][i] = arr2[N][i - 1];
}
for (int i = N; i > n + 1; i--) { // (1,1 -> N,1) 행 +1 이동
arr2[i][n] = arr2[i - 1][n];
}
arr2[n + 1][n] = temp; // 시작점은 1씩 더해지고 끝나는 지점은 1씩 마이너스
N -= 1;
M -= 1;
}
N = N1; // 배열 전체 회전 후 원상복귀
M = M1;
}
}
}
✅ 후기
- 생각보다 어려운 문제였다. 다음에는 다양한 방식으로 풀 수 있도록 해야겠다.
반응형
'백준' 카테고리의 다른 글
백준 2563. 색종이 (0) | 2021.08.20 |
---|---|
백준 1987. 알파벳 (0) | 2021.08.20 |
백준 3109. 빵집 (0) | 2021.08.20 |
백준 15686. 치킨배달 (0) | 2021.08.13 |
백준 1080. 행렬 (0) | 2021.08.13 |
댓글