반응형
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
| 1 초 | 512 MB | 1528 | 762 | 502 | 52.731% |
문제

입력
첫째 줄에 배열의 크기 N, M과 수행해야 하는 회전의 수 R이 주어진다.
둘째 줄부터 N개의 줄에 배열 A의 원소 Aij가 주어진다.
출력
입력으로 주어진 배열을 R번 회전시킨 결과를 출력한다.
28 27 26 25 22 9 15 19 16 8 21 13 10 14 20 7 4 3 2 1
제한
- 2 ≤ N, M ≤ 300
- 1 ≤ R ≤ 1,000
- min(N, M) mod 2 = 0
- 1 ≤ Aij ≤ 108
예제 입력 |
예제 출력 |
| 4 4 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
3 4 8 12 2 11 10 16 1 7 6 15 5 9 13 14 |
| 5 4 7 1 2 3 4 7 8 9 10 13 14 15 16 19 20 21 22 25 26 27 28 |
28 27 26 25 22 9 15 19 16 8 21 13 10 14 20 7 4 3 2 1 |
| 2 2 3 1 1 1 1 |
1 1 1 1 |
풀이 과정
Java 코드
package hello;
import java.util.Scanner;
/*
* https://www.acmicpc.net/problem/16926
* 배열 돌리기 1
* */
public class B16926 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] dx = { 0, 1, 0, -1 };
int[] dy = { 1, 0, -1, 0 };
int N = sc.nextInt();
int M = sc.nextInt();
int R = sc.nextInt(); //회전수
int[][] arr = new int[N][M]; //배열의 크기
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
arr[i][j] = sc.nextInt();
}
}
int s = Math.min(N, M) / 2; //돌릴개수
for (int i = 0; i < R; i++) {
for (int j = 0; j < s; j++) {
int d =0; //d는 방향
int ox=j, oy=j;
int tmp = arr[ox][oy];
while (d<4) {
int nx = ox + dx[d];
int ny = oy + dy[d];
if (nx >= j && ny >= j && nx < N - j && ny < M - j) {
arr[ox][oy] = arr[nx][ny];
ox = nx;
oy = ny;
} else d++;
}
arr[j+1][j] = tmp;
}
}
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
반응형
'알고리즘 > 백준' 카테고리의 다른 글
| 백준 13335 : 트럭 Java (0) | 2023.07.19 |
|---|---|
| 백준 17413 : 단어 뒤집기 2 Java (0) | 2023.07.18 |
| 백준 17204 : 죽음의 게임 Java (0) | 2023.07.16 |
| 백준 16931 : 겉넓이 구하기 Java (0) | 2023.07.15 |
| 백준 1966 : 프린터 큐 Java (0) | 2023.07.14 |