[JAVA]백준 16926번 배열 돌리기 1
[JAVA]백준 16926번 배열 돌리기 1
📌문제 링크
https://www.acmicpc.net/problem/16926
📌문제 설명
새로운 배열을 생성해 문제에 나와있는대로 회전 후 원래 배열에 옮겨주면 되는 간단한 구현 문제입니다.
📌코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
// 입력을 받기 위한 BufferedReader 객체
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 출력을 위한 BufferedWriter 객체
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// 행, 열, 회전 수를 저장할 변수
static int N, M, R;
// 맵을 저장할 2차원 배열
static int[][] map = new int[301][301];
public static void main(String[] args) throws Exception {
// 입력을 받는 메서드 호출
input();
// 문제를 해결하는 메서드 호출
solve();
}
public static void input() throws Exception {
// 첫 줄의 입력을 받아서 StringTokenizer로 분리
StringTokenizer st = new StringTokenizer(br.readLine());
// N, M, R 값을 입력받아 저장
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
R = Integer.parseInt(st.nextToken());
// N개의 줄에 걸쳐 맵의 값을 입력받아 2차원 배열에 저장
for (int i = 1; i <= N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 1; j <= M; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
// 입력 스트림 닫기
br.close();
}
public static void rotate() {
// 회전 결과를 저장할 임시 배열
int[][] temp = new int[N + 1][M + 1];
// 회전할 때 사용할 인덱스와 행, 열 변수 초기화
int idx = 1, row = M, col = N;
while (true) {
// 왼쪽 변을 회전
for (int i = idx + 1; i <= col; i++) {
temp[i][idx] = map[i - 1][idx];
}
// 오른쪽 변을 회전
for (int i = col - 1; i >= idx; i--) {
temp[i][row] = map[i + 1][row];
}
// 위쪽 변을 회전
for (int i = row - 1; i >= idx; i--) {
temp[idx][i] = map[idx][i + 1];
}
// 아래쪽 변을 회전
for (int i = idx + 1; i <= row; i++) {
temp[col][i] = map[col][i - 1];
}
// 인덱스와 행, 열 값을 갱신
idx++;
row--;
col--;
// 인덱스가 행 또는 열을 초과하면 종료
if (idx >= row || idx >= col) break;
}
// 임시 배열의 값을 원래 배열에 복사
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= M; j++) {
map[i][j] = temp[i][j];
}
}
}
public static void solve() throws Exception {
// R번 회전 수행
for (int i = 0; i < R; i++) {
rotate();
}
// 회전 결과를 출력
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= M; j++) {
bw.write(map[i][j] + " ");
}
bw.write("\n");
}
// 출력 스트림 비우기 및 닫기
bw.flush();
bw.close();
}
}
This post is licensed under CC BY 4.0 by the author.