본문 바로가기
공부

달팽이 배열 알고리즘

by MY블로그 2022. 10. 26.

직접 배열의 크기를 입력하는 방식으로 가로세로 최대 100x100 크기의 달팽이 배열 만들기.

인터넷으로 찾아보고 여기저기 만져봤는데 여러번보고 이해해야 될것같다.

snailarray.exe
0.05MB
좌표 x.y 0.0 자리가 1부터 시작해서 시계방향으로 외부에서 내부로 숫자 1씩 증가

#include <iostream>
using namespace std;

int main() //코드 참고 https://mungto.tistory.com/63
{
    restart: //재시작 지점
    system("cls"); //재시작할때 화면 깔끔하게
    int a[100][100]{ 0 }, n, m, row = 0, col = -1, reverse = 1;
    int input;

    cout << "가로 x 세로 의 크기를 입력해 주세요.(1~100까지만)" << endl;
    cout << "가로 : "; cin >> n;
    cout << "세로 : "; cin >> m;
    int limit = 0;
    cout << endl;

    for (int count = 1; count <= n * m;) //총반복의 횟수는 n*m의 숫자까지
    {
        for (int i = 0; i < m - limit; i++) //가로채우기
        {
            col += reverse;
            a[row][col] = count++;
        }
        for (int i = 0; i < n - limit - 1; i++)//세로 채우기
        {
            row += reverse;
            a[row][col] = count++;
        }
        limit++; //최대 반복횟수 감소
        reverse = -reverse; //반복이 한번될때마다 역전시킨다.
    }

    for (int i = 0; i < n; i++)  // 출력
    {
        for (int j = 0; j < m; j++)
            cout << a[i][j] << "\t"; //숫자사이에 탭간격두기
        cout << endl; // 한행이 끝나면 줄바꾸기
    }
    cout << endl;
    cout << "[ 0 ] 다시입력하기 / [ 그외 ] 종료" << endl;
    cin >> input;
    if (input == 0) goto restart; // 다시시작하는 부분으로
    return 0;
}

댓글