본문 바로가기
lecture.js/algorithm.log

#007 배열 회전

by malda 2017. 7. 10.
#문제)
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