Notice
Recent Posts
Recent Comments
Link
Dino Rudy
[백준] 배열 돌리기 3_16935번 - 공룡 루디 본문
배열 돌리기 3 16935번 solved.ac 실버 2
https://www.acmicpc.net/problem/16935
16935번: 배열 돌리기 3
크기가 N×M인 배열이 있을 때, 배열에 연산을 R번 적용하려고 한다. 연산은 총 6가지가 있다. 1번 연산은 배열을 상하 반전시키는 연산이다. 1 6 2 9 8 4 → 4 2 9 3 1 8 7 2 6 9 8 2 → 9 2 3 6 1 5 1 8 3 4 2 9 →
www.acmicpc.net
문제 해석 및 풀이
배열 돌리기 3 문제는
크기가 N x M 2차원 배열에 6가지 연산을 구현해야 합니다.
1. 상하반전
2. 좌우반전
3. 오른쪽으로 90도 회전
4. 왼쪽으로 90도 회전
5. 4등분 후 시계방향으로 위치 조정
6. 4등분 후 반시계 방향으로 위치 조정
총 6가지 연산을 구현해야 합니다.
이 문제에서 주의해야 할 점은
3,4번 연산을 수행할 때 행과 열의 크기가 바뀐다는 점을 주의하셔야 합니다.
따라서 2차원 배열을 선언할 때 n과 m 중 큰 수를 big이라고 했을 때
int [][] arr = new int [big][big]과 같이 선언해줘야 하고
3,4번 연산을 수행할 때마다 n과 m을 바꿔줘야 합니다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static int n, m, r, big;
public static int[][] arr;
public static int[][] tmp;
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void copy(int[][] tmp) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
arr[i][j] = tmp[i][j];
}
}
}
public static void print(int[][] tmp) throws IOException {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
bw.write((tmp[i][j] + " "));
}
bw.write("\n");
}
}
public static void do1() { //상하반전
for (int i = 0; i < n / 2; i++) {
for (int j = 0; j < m; j++) {
tmp[i][j] = arr[n - 1 - i][j];
tmp[n - 1 - i][j] = arr[i][j];
}
}
copy(tmp);
}
public static void do2() { //좌우반전
for (int c = 0; c < m / 2; c++) {
for (int r = 0; r < n; r++) {
tmp[r][c] = arr[r][m - 1 - c];
tmp[r][m - 1 - c] = arr[r][c];
}
}
copy(tmp);
}
public static void do3() { //오른쪽으로 90도 회전
int tmp_n = n;
n = m;
m = tmp_n;
for (int r = 0; r < m; r++) {
for (int c = 0; c < n; c++) {
tmp[c][m - 1 - r] = arr[r][c];
}
}
copy(tmp);
}
public static void do4() { //왼쪽으로 90도 회전
int tmp_n = n;
n = m;
m = tmp_n;
for (int r = 0; r < m; r++) {
for (int c = 0; c < n; c++) {
tmp[n - 1 - c][r] = arr[r][c];
}
}
copy(tmp);
}
public static void do5() { //4등분 후 시계방향
for (int r = 0; r < n / 2; r++) {
for (int c = 0; c < m / 2; c++) {
tmp[r][m / 2 + c] = arr[r][c];
}
}
for (int r = 0; r < n / 2; r++) {
for (int c = m / 2; c < m; c++) {
tmp[n / 2 + r][c] = arr[r][c];
}
}
for (int r = n / 2; r < n; r++) {
for (int c = m / 2; c < m; c++) {
tmp[r][c - m / 2] = arr[r][c];
}
}
for (int r = n / 2; r < n; r++) {
for (int c = 0; c < m / 2; c++) {
tmp[r - n / 2][c] = arr[r][c];
}
}
copy(tmp);
}
public static void do6() { //4등분 후 반시계 방향
for (int r = 0; r < n / 2; r++) {
for (int c = 0; c < m / 2; c++) {
tmp[r + n / 2][c] = arr[r][c];
}
}
for (int r = 0; r < n / 2; r++) {
for (int c = m / 2; c < m; c++) {
tmp[r][c - m / 2] = arr[r][c];
}
}
for (int r = n / 2; r < n; r++) {
for (int c = m / 2; c < m; c++) {
tmp[r - n / 2][c] = arr[r][c];
}
}
for (int r = n / 2; r < n; r++) {
for (int c = 0; c < m / 2; c++) {
tmp[r][c + m / 2] = arr[r][c];
}
}
copy(tmp);
}
public static void main(String[] args) throws IOException {
String[] inp = br.readLine().split(" ");
n = Integer.parseInt(inp[0]);
m = Integer.parseInt(inp[1]);
r = Integer.parseInt(inp[2]);
big = n > m ? n : m;
arr = new int[big][big];
tmp = new int[big][big];
for (int i = 0; i < n; i++) {
inp = br.readLine().split(" ");
for (int j = 0; j < m; j++)
arr[i][j] = Integer.parseInt(inp[j]);
}
inp = br.readLine().split(" ");
for (int i = 0; i < inp.length; i++) {
if (Integer.parseInt(inp[i]) == 1)
do1();
else if (Integer.parseInt(inp[i]) == 2)
do2();
else if (Integer.parseInt(inp[i]) == 3)
do3();
else if (Integer.parseInt(inp[i]) == 4)
do4();
else if (Integer.parseInt(inp[i]) == 5)
do5();
else if (Integer.parseInt(inp[i]) == 6)
do6();
}
print(arr);
br.close();
bw.close();
}
}
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 연구소_14502 - 공룡 루디 (0) | 2021.08.14 |
---|---|
[백준] 배열 돌리기 4_17406 - 공룡 루디 (0) | 2021.08.14 |
[백준] 배열 돌리기 1_16926번 - 공룡 루디 (0) | 2021.08.14 |
[백준] 캐슬 디펜스_17135 - 공룡 루디 (0) | 2021.08.13 |
[백준] 치킨 배달_15686번 - 공룡 루디 (0) | 2021.08.13 |