본문 바로가기

교육/문제해결

[1일차] 나선형 배열

- 문제 설명

크기가 N*N인 2차원 배열에 다음과 같은 나선형 모양의 순서로 1부터 숫자가 들어감

크기 N, 행, 열 값이 주어지면 해당 숫자 출력

5<=N<100, N은 홀수

행과 열은 0부터 시작

1     2     3     4    

16    17    18    19    6

15    24    25    20    7

14    23    22    21    8

13    12    11    10    9

- 입력

1 // 테스트케이스 갯수

5 3 2 // N, 행, 열

- 출력

#1 22

- 입력예시

3
5 3 2
5 4 4
9 6 3

- 출력예시

#1 22
#2 9
#3 68

- 코드

int arr[100][100];

int main(int argc, const char * argv[]) {

    int T;

    scanf("%d", &T);

    for(int tc = 1;tc <= T;tc++)

    {

        int N, row, col;

        scanf("%d %d %d",&N,&row,&col);

        int num = 1;

        int count = 0;

        for(int i=0;i<2*N-1;i++) // 한 라인 기준으로 총 2*N-1번 돔

        {

            for(int j=0;j<N-count;j++) //  카운트 수 만큼 줄어듬

            {

                if(i%4 == 0) // 우측방향

                {

                    arr[i/4][j+i/4] = num;

                }

                else if(i%4 == 1) // 아래 방향

                {

                    arr[j+i/4+1][N-1-i/4] = num;

                }

                else if(i%4 == 2) // 왼쪽 방향

                {

                    arr[N-1-i/4][N-1-i/4-j-1] = num;

                }

                else // 위 방향

                {

                    arr[N-1-(i/4+1)-j][i/4] = num;

                }

                num++;

            }

            if(i%4 == 0 || i%4 == 2) // 채울 숫자가 줄어드는 구간

                count++;

        }

        printf("#%d %d\n",tc,arr[row][col]);

    }

    return 0;

}