C_C++

(C언어) 2차원 배열, 달팽이 모양의 수열

고니자니 2023. 4. 15. 07:42
반응형

먼저, 달팽이 모양의 수열을 밖에서 안쪽으로, 왼쪽 위에서 아래로 시작하는 모양의 C언어 코드입니다.

배열 크기는 코드 위쪽에서 N으로 정으를 했습니다.

#include <stdio.h>

#define ROW 7
#define COL 7

int main() {
    int arr[ROW][COL];
    int n = 1;
    int row_start = 0, row_end = ROW - 1, col_start = 0, col_end = COL - 1;

    while (row_start <= row_end && col_start <= col_end) {
        // 첫 번째 열부터 마지막 열까지
        for (int i = row_start; i <= row_end; i++) {
            arr[i][col_start] = n++;
        }
        col_start++;

        // 마지막 행부터 첫 번째 행까지
        for (int i = col_start; i <= col_end; i++) {
            arr[row_end][i] = n++;
        }
        row_end--;

        // 마지막 열부터 첫 번째 열까지
        for (int i = row_end; i >= row_start; i--) {
            arr[i][col_end] = n++;
        }
        col_end--;

        // 첫 번째 행부터 마지막 행까지
        for (int i = col_end; i >= col_start; i--) {
            arr[row_start][i] = n++;
        }
        row_start++;
    }

    // 출력
    for (int i = 0; i < ROW; i++) {
        for (int j = 0; j < COL; j++) {
            printf("%3d", arr[i][j]);
        }
        printf("\n");
    }

    return 0;
}

달팽이 수열

 

다음 코드는 달팽이 모양의 수열을 밖에서 안쪽으로, 왼쪽 위에서 오른쪽으로(시계방향) 시작하는 모양의 C언어 코드입니다.

배열 크기는 코드 위쪽에서 N으로 정으를 했습니다.

#include <stdio.h>

#define ROW 7
#define COL 7

int main() {
    int arr[ROW][COL];
    int n = 1;
    int row_start = 0;
    int row_end = ROW - 1;
    int col_start = 0;
    int col_end = COL - 1;

    while (row_start <= row_end && col_start <= col_end) {
        // 첫 번째 열부터 마지막 열까지
        for (int i = col_start; i <= col_end; i++) {
            arr[row_start][i] = n++;
        }
        row_start++;

        // 첫 번째 행부터 마지막 행까지
        for (int i = row_start; i <= row_end; i++) {
            arr[i][col_end] = n++;
        }
        col_end--;

        // 마지막 열부터 첫 번째 열까지
        for (int i = col_end; i >= col_start; i--) {
            arr[row_end][i] = n++;
        }
        row_end--;

        // 마지막 행부터 첫 번째 행까지
        for (int i = row_end; i >= row_start; i--) {
            arr[i][col_start] = n++;
        }
        col_start++;
    }

    // 출력
    for (int i = 0; i < ROW; i++) {
        for (int j = 0; j < COL; j++) {
            printf("%3d", arr[i][j]);
        }
        printf("\n");
    }

    return 0;
}

달팽이 수열: 시계 방향

 

위 코드를 알맞게 수정하면 원하는 여러 가지 방향으로 숫자를 넣을 수 있습니다.

출력 모양을 변경하지 않도록 합니다.

 

반응형

 

아래와 같이 표현할 수도 있습니다.

#include <stdio.h>
#define n   7

int main() 
{
    int arr[n][n];

    int i, j, k = 1;
    for (i = 0; i < n; i++) {
        for (j = i; j < n - i; j++) {
            arr[i][j] = k++;
        }
        for (j = i + 1; j < n - i; j++) {
            arr[j][n - i - 1] = k++;
        }
        for (j = n - i - 2; j >= i; j--) {
            arr[n - i - 1][j] = k++;
        }
        for (j = n - i - 2; j > i; j--) {
            arr[j][i] = k++;
        }
    }

    // 출력
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            printf("%3d", arr[i][j]);
        }
        printf("\n");
    }

    return 0;
}

(C언어) 2차원 배열, 달팽이 모양의 수열

반응형