16926 배열 돌리기 1 - 구현
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.io.FileInputStream;
class boj_16926 {
static int[] dx = {1, 0, -1, 0};
static int[] dy = {0, 1, 0, -1};
static int N, M, R, rotation;
static int[][] arr;
static void rotate(int count) {
int x = count, y = count;
int direction = 0;
int width = M - count * 2;
int height = N - count * 2;
int temp = arr[x][y];
for (int i=0; i<width-1; i++) {
arr[y][x] = arr[y + dy[direction]][x + dx[direction]];
x = x + dx[direction];
y = y + dy[direction];
}
direction++;
for (int i=0; i<height-1; i++) {
arr[y][x] = arr[y + dy[direction]][x + dx[direction]];
x = x + dx[direction];
y = y + dy[direction];
}
direction++;
for (int i=0; i<width-1; i++) {
arr[y][x] = arr[y + dy[direction]][x + dx[direction]];
x = x + dx[direction];
y = y + dy[direction];
}
direction++;
for (int i=0; i<height-1; i++) {
arr[y][x] = arr[y + dy[direction]][x + dx[direction]];
x = x + dx[direction];
y = y + dy[direction];
}
arr[count+1][count] = temp;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// testCase = Integer.parseInt(br.readLine());
StringTokenizer token = new StringTokenizer(br.readLine());
N = Integer.parseInt(token.nextToken());
M = Integer.parseInt(token.nextToken());
R = Integer.parseInt(token.nextToken());
arr = new int[N][M];
for (int i=0; i<N; i++) {
token = new StringTokenizer(br.readLine());
for (int j=0; j<M; j++) {
arr[i][j] = Integer.parseInt(token.nextToken());
}
}
rotation = Math.min(N, M) / 2;
for (int i=0; i<R; i++) {
for (int r = 0; r < rotation; r++) {
rotate(r);
}
}
for (int i=0; i<N; i++) {
for (int j=0; j<M; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
16935 배열 돌리기 3 - 구현
중간에 화나서 하드코딩..
import java.util.*;
import java.io.*;
public class hwalgo07_서울_10반_하늘이 {
static int N, M, R, temp, r;
static int[][] arr, tempArr;
static void swap(int x1, int y1, int x2, int y2) {
temp = arr[y1][x1];
arr[y1][x1] = arr[y2][x2];
arr[y2][x2] = temp;
}
static void changeNM() {
temp = N;
N = M;
M = temp;
}
static void copyArr() {
tempArr = new int[N][M];
for (int i=0; i<N; i++) {
for (int j=0; j<M; j++) {
tempArr[i][j] = arr[i][j];
}
}
}
// 상하
static void func1() {
for (int i=0; i<M; i++) {
for (int j=0; j<N/2; j++) {
swap(i, j, i, N-j-1);
}
}
}
// 좌우
static void func2() {
for (int i=0; i<M/2; i++) {
for (int j=0; j<N; j++) {
swap(i, j, M-i-1, j);
}
}
}
// 오른쪽 90
static void func3() {
copyArr();
for (int i=0; i<M; i++) {
for (int j=0; j<N; j++) {
arr[i][j] = tempArr[N-j-1][i];
}
}
changeNM();
}
// 왼쪽 90
static void func4() {
copyArr();
for (int i=0; i<M; i++) {
for (int j=0; j<N; j++) {
arr[i][j] = tempArr[j][M-i-1];
}
}
changeNM();
}
// 4등분 오른쪽
static void func5() {
// 렛츠하드코딩
copyArr();
for (int i=0; i<N/2; i++) {
for (int j=0; j<M/2; j++) {
arr[i][j] = tempArr[N/2+i][j];
}
}
for (int i=0; i<N/2; i++) {
for (int j=M/2; j<M; j++) {
arr[i][j] = tempArr[i][j-M/2];
}
}
for (int i=N/2; i<N; i++) {
for (int j=M/2; j<M; j++) {
arr[i][j] = tempArr[i-N/2][j];
}
}
for (int i=N/2; i<N; i++) {
for (int j=0; j<M/2; j++) {
arr[i][j] = tempArr[i][M/2+j];
}
}
}
// 4등분 왼쪽
static void func6() {
copyArr();
for (int i=0; i<N/2; i++) {
for (int j=0; j<M/2; j++) {
arr[i][j] = tempArr[i][j+M/2];
}
}
for (int i=0; i<N/2; i++) {
for (int j=M/2; j<M; j++) {
arr[i][j] = tempArr[i+N/2][j];
}
}
for (int i=N/2; i<N; i++) {
for (int j=M/2; j<M; j++) {
arr[i][j] = tempArr[i][j-M/2];
}
}
for (int i=N/2; i<N; i++) {
for (int j=0; j<M/2; j++) {
arr[i][j] = tempArr[i-N/2][j];
}
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer token = new StringTokenizer(br.readLine());
N = Integer.parseInt(token.nextToken());
M = Integer.parseInt(token.nextToken());
R = Integer.parseInt(token.nextToken());
int size = Math.max(N, M);
arr = new int[size][size];
for (int i=0; i<N; i++) {
token = new StringTokenizer(br.readLine());
for (int j=0; j<M; j++) {
arr[i][j] = Integer.parseInt(token.nextToken());
}
}
token = new StringTokenizer(br.readLine());
for (int i=0; i<R; i++) {
r = Integer.parseInt(token.nextToken());
switch (r) {
case 1: func1(); break;
case 2: func2(); break;
case 3: func3(); break;
case 4: func4(); break;
case 5: func5(); break;
case 6: func6(); break;
}
}
for (int i=0; i<N; i++) {
for (int j=0; j<M; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
'ALGORITHM > OTHER' 카테고리의 다른 글
[c++] 20291 파일정리 (map사용) (0) | 2021.09.02 |
---|---|
[JAVA] 1719 택배 (다익스트라) (0) | 2021.09.02 |
[c++] 전화번호 목록 (프로그래머스-Trie, 정렬, 해시) (0) | 2021.07.17 |
[c++] 숫자 문자열과 영단어 (프로그래머스, 구현) (0) | 2021.07.12 |
[c++] 더 맵게 (프로그래머스 - heap/ priority queue) (0) | 2021.06.29 |