2차원 배열 쉽게 돌리기 (90, 270도 회전)

알고리즘 논리

*사각형이 N X N, 즉 정사각형이라는 가정을 한다

1. 가장 가장자리의 테두리 영역부터 회전시킨다 (s, e)

2. 가장 바깥 테두리의 시작점을 0, 끝점을 map.length-1 위치라고 생각하자

3. 각 변을 Top, Left, Bottom, Right라고 할 때 각 변의 첫자리, 두 번째 자리, 세 번째 자리 순으로 교체시킨다 (i, j)

    static void rotate(int[][] map) {

        for (int s = 0, e = map.length - 1; s < e; s++, e--) {
            for (int i = s, j = e; i < e; i++, j--) {

                int tmp = map[s][i];
                map[s][i] = map[i][e];
                map[i][e] = map[e][j];
                map[e][j] = map[j][s];
                map[j][s] = tmp;
            }
        }

    }

    public static void main(String[] args) throws IOException {
        int[][] map = {
                { 1, 0, 0, 0, 1 },
                { 0, 1, 0, 1, 0 },
                { 0, 0, 1, 0, 0 },
                { 0, 0, 0, 0, 0 },
                { 0, 0, 0, 0, 0 },
        };

        rotate(map);
        print(map);
        rotate(map);
        print(map);
        rotate(map);
        print(map);

        bw.write(result + "");
        bw.flush();
    }

    private static void print(int[][] map) {
        System.out.println("-----------------");
        for (int i = 0; i < map.length; i++) {
            for (int j = 0; j < map[0].length; j++) {
                System.out.print(map[i][j] + " ");
            }
            System.out.println("");
        }
    }