문제
삼각형의 높이 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이 아닌 경우에만 출력을 하면 된다.
< 결과 >
'SW > 문제은행' 카테고리의 다른 글
[C/C++] 정올 - 파스칼 삼각형 #2071 (0) | 2024.04.24 |
---|---|
[C/C++] 정올 - 별삼각형 #1523 #1719 #1329 (1) | 2024.04.23 |
[C/C++] 정올 - 달팽이 트리 #5398 (0) | 2024.04.17 |
[C/C++] 정올 - 달팽이 사각형 #1707 (0) | 2024.04.17 |
댓글