본문 바로가기
SW/문제은행

[C/C++] 정올 - 달팽이 삼각형 #1337

by FastBench 2024. 4. 17.

문제

삼각형의 높이 N을 입력받아서 아래와 같이 숫자 0부터 달팽이 모양으로 차례대로 채워진 삼각형을 출력하는 프로그램을 작성하시오.

< 처리조건 > 

왼쪽 위부터 시계방향으로 오른쪽 아래로 이동하면서 숫자 0부터 N개를 채우고 

다시 왼쪽으로, 다음은 위쪽으로 반복하면서 채워 나간다. (숫자 9 다음에는 0부터 다시 시작한다.)

 

< 풀이 >

2차원 배열에서, 삼각형 모양으로 출력되야 하므로 배열 전체를 사용하지 않는 값(예를들어 -1) 로 채운다.

이때 가변길이배열은 런타임 초기화가 불가능하므로, cstring 헤더의 memset 함수를 활용한다.

    int arr[n][n];
    memset(arr,-1,sizeof(int)*n*n);

    int m = n;
    int x = -1;
    int y = -1;
    int num = 0;

    while( m > 0 ){
        for ( int i = 1; i <= m; i++){
            arr[++x][++y] = num++; 
            num = (num == 10) ? 0 : num;
        }
        m--;
        for ( int i = 1; i <=m; i++){
            arr[x][--y] = num++;
            num = (num == 10) ? 0 : num;
        }
        m--;
        for ( int i = 1; i <=m; i++){
            arr[--x][y] = num++;
            num = (num == 10) ? 0 : num;
        }
        m--;
    }

 

이후 2차원 배열 출력시 -1이 아닌 경우에만 출력을 하면 된다.

 

< 결과 >

 

댓글