1. 배열을 시계방향으로 돌리면 인덱스가 어떻게 바뀌는가?

인덱스는 이렇게 변한다, 자세히 보다보면 규칙이 보인다.

그 규칙은 바로

원래 인덱스가 (i, j)라면 바뀐 인덱스는 (j, n - 1 - i ) (n은 원래 배열의 세로길이)

//-1을 하는 이유는 배열이 0부터 시작이기 때문...

 

2. 반시계방향은?

반시계 방향은 원래 인덱스 (i, j)에서 (n - 1 - j, i)가 된다.

 

#그리고 만약 배열의 가로, 세로길이가 다르다면 가로 세로길이를 교환해야 한다.

 

3. 코드

void Rotate(int dir) //-1 : 반시계, 1 : 시계 방향
{

    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            if (dir == -1) tmp[n - j - 1][i] = board[i][j];// 배열이 0부터 시작이라면 -1
            else tmp[j][n - i - 1] = board[i][j];
        }
    }

    swap(n, m);

    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++) board[i][j] = tmp[i][j];
}

 

+ Recent posts