정보 처리 기사 문제집에 단골로 나오는 문제인가...???
정보 처리 기사 책 같은건 돈 아까워서 산 적은 없지만,
공부는 해봐야 하기에 뭐가 나오나 잠깐 빌려본 적은 있다..
그 때 본 간단한 슈도 코드(pseudo code)가 떠올라서 C언어로 짜봤다.
================================================================================================
[ 실행화면 ]
================================================================================================
[ 소스코드 ]
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i, j, x, y, idx, idy, size, num, flag;
// 사이즈 입력
printf("사이즈를 입력하세요 : ");
scanf("%d", &size);
// 동적 메모리 할당
int **arr = (int **)malloc(sizeof(int *) * size);
for(i=0; i<size; ++i) {
*(arr + i) = (int *)malloc(sizeof(int) * size);
}
x = 0; // 배열의 행위치
y = -1; // 배열의 열위치
num = 1; // 들어갈 숫자
flag = 1; // 증감 플래그
idx = idy = size;
// 값 대입
for(i=0; i<idy; ++i)
{
// 가로로 이동하면서 하나씩 할당
for(j=0; j<idx; ++j)
{
y = y + flag;
arr[x][y] = num++;
}
// 횟수 줄이고
idx--;
if(idx != 0)
{
// 세로로 이동하면서 하나씩 할당
for(j=0; j<idx; ++j)
{
x = x + flag;
arr[x][y] = num++;
}
}
// 이동방향의 양음이 바뀜
flag *= (-1);
}
// 화면에 동적할당 처리된 2차원 배열 출력
for(i=0; i<size; ++i)
{
for(j=0; j<size; ++j)
{
printf("%3d ", arr[i][j]);
}
printf("\n");
}
// 동적 할당 메모리 해제
for(i=0; i<size; ++i) {
free(*(arr + i));
}
free(arr);
return 0;
}
================================================================================================
'IT_Programming > C · C++' 카테고리의 다른 글
[C] 외부함수 호출해서 사용하기 (0) | 2009.06.16 |
---|---|
[C] 구조체 배열_학생 성적 그래프 (0) | 2009.06.16 |
[C] 배열 대각선 모양으로 숫자 넣기 (0) | 2009.06.05 |
[ C++ ] Efficient C++ Key Point 정리 (0) | 2009.06.03 |
[C] 피보나치 수열 [ Ver. 재귀 / 비재귀 ] (0) | 2009.06.02 |