#문제)
5X5 배열을 아래와 같이 90도 회전하여라.
<원본 배열>
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 |
<90도 회전 이후 배열>
21 |
16 |
11 |
6 |
1 |
22 |
17 |
12 |
7 |
2 |
23 |
18 |
13 |
8 |
3 |
24 |
19 |
14 |
9 |
4 |
25 |
20 |
15 |
10 |
5 |
어려울 것 같지만 규칙성만 판단하면 지금까지 했던 배열 문제와 크게 다르지 않다.
규칙성1)
원본배열의 시작위치 : 0,0 (row 인덱스, column 인덱스)
90도 회전 후 시작위치: 0,4 (row 인덱스, column 인덱스)
원본 배열의 진행 순서 : column 인덱스의 증가
90도 회전 후 진행순서: row 인덱스의 증가
원본 배열의 열바뀜 시 : row 인덱스 증가
90도 회전 후 열바뀜 : column 인덱스의 감소
즉, 원본 배열의 column 인덱스 값으로 90도 회전한 배열의 rowIndex로 접근하면된다.
원본 배열의 열바뀜 시 row인덱스 값을 90도 회전한 배열의 column인덱스(colSize-rowIndex값)를 통해 접근한다.
package dataStructure.prediction.array;
public class RotationArray {
private int columnSize = 5;
private int rowSize = 5;
private int[][] array = new int[rowSize][columnSize];
public RotationArray() {
// TODO Auto-generated constructor stub
int number = 1;
for(int row=0; row<rowSize; row++) {
for(int col=0; col<columnSize; col++) {
array[row][col] = number++;
}
}
}
public int[][] cloneRotationArray() {
int[][] newArray = new int[rowSize][columnSize];
for(int row=0;row<rowSize;row++) {
int newArrayColumnIndex = (columnSize - row)-1;
for(int col=0;col<columnSize;col++) {
int newArrayRowIndex = col;
newArray[newArrayRowIndex][newArrayColumnIndex] = array[row][col];
}
}
return newArray;
}
public void print() {
print(this.array);
}
public void print(int[][] array) {
for(int row=0; row<rowSize; row++) {
for(int col=0; col<columnSize; col++) {
System.out.printf("%3d",array[row][col]);
}
System.out.println();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
RotationArray rotation = new RotationArray();
rotation.print();
System.out.println();
rotation.print(rotation.cloneRotationArray());
}
}
'lecture.js > algorithm.log' 카테고리의 다른 글
#009 소수 판별 (0) | 2017.07.12 |
---|---|
#008 고속버스 배치 (0) | 2017.07.12 |
#006 열우선 배열 (0) | 2017.07.10 |
#005 모래시계 배열 (0) | 2017.07.10 |
#004 ㄹ 배열 (0) | 2017.07.10 |