250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 23288
- 에라토스테네스의채
- 정올 1620
- 코테
- 백준13458
- Bfs와DFS
- 재귀함수
- 볼륨 만들기
- 알고리즘개념
- 백준
- 완탐
- 삼성역테
- N과M
- 백준15652
- 주사위굴리기2
- 백준2251
- 완전탐색
- 중복조합
- 정보처리기사
- 파티션 크기 조정
- BFS
- D드라이브생성
- 자바
- 코테준비
- 전화번호속의암호
- 알고리즘
- 자바 코테
- java
- 순열
- 중복순열
Archives
- Today
- Total
뚱땅뚱땅
[문제] 백준 16935번 배열 돌리기 3 본문
728x90
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
풀이
배열 돌리기 1과 4를 했다면 쉽게 풀 수 있다.
여기서 오른쪽, 왼쪽 방향으로 회전할 때 행렬의 크기가 반대로 변경되니까 이점만 유의하면 된다.
public class BOJ_16935 {
static int N;
static int M;
static int[][] matrix;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String s[] = in.readLine().split(" ");
N = Integer.parseInt(s[0]);
M = Integer.parseInt(s[1]);
int R = Integer.parseInt(s[2]); // R: 연산 횟수
// init matrix
matrix = new int[N][M];
for (int i = 0; i < N; i++) {
String ss[] = in.readLine().split(" ");
for (int j = 0; j < M; j++) {
matrix[i][j] = Integer.parseInt(ss[j]);
}
}
// init inst
String sss[] = in.readLine().split(" ");
for (int i = 0; i < R; i++) {
int inst = Integer.parseInt(sss[i]);
if (inst == 1) {
one();
} else if (inst == 2) {
two();
} else if (inst == 3) {
three();
} else if (inst == 4) {
four();
} else if (inst == 5) {
five();
} else if (inst == 6) {
six();
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
}
// 상하반전 (행열 변화 x)
static void one() {
int it = N / 2;
for (int i = 0; i < it; i++) {
for (int j = 0; j < M; j++) {
int tmp = matrix[i][j];
matrix[i][j] = matrix[N - 1 - i][j];
matrix[N - 1 - i][j] = tmp;
}
}
}
// 좌우반전
static void two() {
int it = M / 2;
for (int i = 0; i < it; i++) {
for (int j = 0; j < N; j++) {
int tmp = matrix[j][i];
matrix[j][i] = matrix[j][M - 1 - i];
matrix[j][M - 1 - i] = tmp;
}
}
}
// 오른쪽 90도 (행열 바뀜) n,m -> m,n
static void three() {
int[][] newMatrix = new int[M][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
newMatrix[j][N - i - 1] = matrix[i][j];
}
}
int tmp = N;
N = M;
M = tmp;
matrix = new int[N][M];
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
matrix[i][j] = newMatrix[i][j];
}
}
}
// 왼쪽 90도
static void four() {
int[][] newMatrix = new int[M][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
newMatrix[M-j-1][i] = matrix[i][j];
}
}
int tmp = N;
N = M;
M = tmp;
matrix = new int[N][M];
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
matrix[i][j] = newMatrix[i][j];
}
}
}
// 1-2-3-4-1
static void five() {
int hN = N/2;
int hM = M/2;
int[][] tmp1 = new int[hN][hM];
for(int i=0;i<hN;i++) {
for(int j=0;j<hM;j++) {
tmp1[i][j] = matrix[i][j];
}
}
// 4->1
for(int i=N/2;i<N;i++) {
for(int j=0;j<M/2;j++) {
matrix[i-N/2][j]=matrix[i][j];
}
}
// 3->4
for(int i=hN;i<N;i++) {
for(int j=hM;j<M;j++) {
matrix[i][j-hM] = matrix[i][j];
}
}
//2->3
for(int i=0;i<hN;i++) {
for(int j=hM;j<M;j++) {
matrix[i+hN][j] = matrix[i][j];
}
}
// tmp1 -> 2
for(int i=0;i<hN;i++) {
for(int j=hM;j<M;j++) {
matrix[i][j] = tmp1[i][j-hM];
}
}
}
//1-4, 4-3, 3-2.2-1
static void six() {
int hN = N/2;
int hM = M/2;
int[][] tmp1 = new int[hN][hM];
for(int i=0;i<hN;i++) {
for(int j=0;j<hM;j++) {
tmp1[i][j] = matrix[i][j];
}
}
//2->1
for(int i=0;i<hN;i++) {
for(int j=hM;j<M;j++) {
matrix[i][j-hM] = matrix[i][j];
}
}
//3-> 2
for(int i=hN;i<N;i++) {
for(int j=hM;j<M;j++) {
matrix[i-hN][j] = matrix[i][j];
}
}
//4->3
for(int i=hN;i<N;i++) {
for(int j=0;j<hM;j++) {
matrix[i][j+hM] = matrix[i][j];
}
}
//1->4
for(int i=0;i<hN;i++) {
for(int j=0;j<hM;j++) {
matrix[i+hN][j] = tmp1[i][j];
}
}
}
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[문제] 백준 16948 데스나이트 (0) | 2021.02.12 |
---|---|
[문제] 백준 3184번 양 (0) | 2021.02.11 |
[문제] 백준 17406번 배열 돌리기 4 (0) | 2021.02.11 |
[문제] 백준 12789번 도키도키 간식드리미 (0) | 2021.02.11 |
[문제] 백준 2504번 괄호의 값 (0) | 2021.02.11 |
Comments