코딩테스트 문제를 풀다보면 2차원 배열을 조작하는 경우가 굉장히 많은 것 같다. (맵을 상하좌우로 기울여라, 지도를 회전하라 등등..)
최근에 푼 2020 KAKAO BLIND RECRUITMENT 기출문제중 자물쇠와 열쇠라는 문제가 있는데 여기서 2차원배열을 90, 180, 270, 360 도 회전시켜야 하는 코드가 필요하다.
배열의 인덱스를 이용해서 N도 회전했을 때 각 자리에 바뀌는 값들을 구해야 하는데 꾀나 번거로웠다.
다음에 또 구해야 한다면 할 수는 있겠지만 매번 시간을 굉장히 많이 잡아먹을 것 같아서 블로그에 정리해두려고 한다.
다음과 같은 2차원 배열이 있다고 하자.
먼저 배열을 시계방향으로 90도 회전시키면 배열이 다음과 같이 값이 바뀐다.
그리고 다음은 시계방향으로 180도 회전한 모습이다.
다음은 270도^^
360도 회전하면 처음 모습으로 다시 돌아온다.
각각 회전하여 바뀐 값을 임시 temp배열에 넣고 temp배열을 출력하는 코드이다.
package com.algorithm;
public class Main {
public static void main(String[] args) {
int[][] array = {{0, 0, 0}, {1, 0, 0}, {0, 1, 1}};
int[][] temp = new int[array.length][array[0].length];
int N = array.length;
for (int k = 0; k < 4; k++) { // 0: 90도/ 1: 180도/ 2: 270도/ 3: 360도
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[0].length; j++) {
if (k == 0) { // 90도
temp[i][j] = array[N - j - 1][i];
} else if (k == 1) { // 180도
temp[i][j] = array[N - i - 1][N - j - 1];
} else if (k == 2) { // 270도
temp[i][j] = array[j][N - i - 1];
} else if (k == 3) { // 360도
temp[i][j] = array[i][j];
}
}
}
for (int l = 0; l < temp.length; l++) {
for (int m = 0; m < temp[l].length; m++) {
System.out.print(temp[l][m] + " ");
}
System.out.println();
}
System.out.println();
temp = new int[array.length][array[0].length];
}
}
}
- 출력
0 1 0
1 0 0
1 0 0
1 1 0
0 0 1
0 0 0
0 0 1
0 0 1
0 1 0
0 0 0
1 0 0
0 1 1
'코딩 테스트 > TIP' 카테고리의 다른 글
[JAVA] 날짜, 시간 계산 총 정리 (0) | 2020.11.24 |
---|---|
[JAVA] 10진수 n진수로 변환하기 (0) | 2020.11.21 |
[JAVA] 문자열이 영어로만 이루어져 있는지 판별하기(Pattern.mathces()) (0) | 2020.11.10 |
[JAVA] 아스키(ASCII) 코드 값 구하기 (0) | 2020.11.10 |
[JAVA] 최대 공약수(GCD), 최소 공배수(LCM) 구하기 (2) | 2020.10.29 |