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

[C/C++] 정올 - 달팽이 사각형 #1707

by FastBench 2024. 4. 17.

문제

정사각형의 크기를 입력 받은 후 시계 방향으로 돌면서 다음과 같은 형태로 출력하는 프로그램을 작성하시오.

 

< 처리조건 >

(1) 가장 왼쪽 위의 좌표부터 차례로 숫자를 대입 시킨다.

(2) 오른쪽으로 채워 나가다가 끝이면 다시 아래 → 왼쪽 → 위 →오른쪽의 순으로 모두 채워질 때까지 반복한다.

 

< 풀이 >

배열에 원소를 넣을때 마다, cnt 값을 올린다.

cnt 값이 n*n 이하일때까지 while 문을 돌린다.

 

while 문 내에 for 문이 4 개 포함되어있지만, 루프에 문제가 생기지는 않는다.

for 문이 반복되는 조건은 m 이 1이상일 때이기 때문이다.

n*n 값이 채워지는 경우 m은 0이 되므로 for문은 돌지 않고 정상적으로 의도한 만큼 while 문은 돌고 종료된다.

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

 

< 결과 >

댓글