본문 바로가기
C

[C][2차원배열] 지그재그 초기화

by Junk_Seo 2018. 1. 1.
반응형

지그재그 초기화

1번째 방식

첫 번째 index부터 초기화를 하고 데이터와 가로 index의 값을 가로의 길이만큼 반복하여 +1 or -1씩 해주는 방법이다.

이렇게 하면 반복의 마지막에 가로의 index를 넘어가기 때문에 가로의 index를 맞춰주고 세로의 index를 +1 해준다.

그림으로 표현하면 이렇다.

 

<코드>

int arData[4][3] = {};
int nData = 0;
int nX = 0;
int nY = 0;
int nAdd = 0;
nData = 1;
nAdd = 1;
for (int i = 0; i < 4; i++) {
	for (int j = 0; j < 3; j++) {
		arData[nY][nX] = nData;
		nX += nAdd;
		nData++;
	}
	nAdd *= -1;
	nX += nAdd;
	nY++;
}

for (int i = 0; i < 4; i++) {
	for (int j = 0; j < 3; j++) {
		printf("%2d ", arData[i][j]);
	}
	printf("\n");
}
printf("\n");

지그재그로 초기화를 하기 때문에 가로의 index는 세로의 index의 값이 증가할 때마다 값이 1씩 증가하거나 감소한다.

이를 코드에 표현하기 위해 가로의 index인 nX의 값을 nAdd라는 변수를 통해 값을 더해주면서 표현했고, 이 변수는 세로의 index인 nY의 값이 증가할 때마다 *-1을 하였다.

 

2번째 방식

첫 번째 방식이 가로의 index의 길이 만큼 반복을 했다면 이번에는 가로의 index -1 값만큼 반복하는 방식을 사용한다.

즉, 반복이 끝나면 가로의 마지막 index에는 값이 초기화되지 않기 때문에 따로 초기화를 해주고 세로의 index를 증가시켜 주는 방식이다.

그림으로 표현하면 이렇다.

 

<코드>

int arData[4][3] = {};
int nData = 0;
int nX = 0;
int nY = 0;
int nAdd = 0;
int nLenX = 0;
int nLenY = 0;

nData = 1;
nAdd = 1;
nLenX = 3;
nLenY = 4;
for (int i = 0; i < nLenY; i++) {
	for (int j = 0; j < (nLenX - 1); j++) {
		arData[nY][nX] = nData;
		nData++;
		nX += nAdd;
	}
	arData[nY][nX] = nData;
	nData++;
	nAdd *= -1;
	nY++;
}	

for (int i = 0; i < 4; i++) {
	for (int j = 0; j < 3; j++) {
		printf("%2d ", arData[i][j]);
	}
	printf("\n");
}
printf("\n");

가로의 값을 초기화하는 반복이 끝난 후 마지막 index를 초기화 하는 코드가 추가된 것을 볼 수 있다.

 

3번째 방식

지그재그 초기화의 규칙을 찾아서 2차원 배열의 index에 순서대로 값을 초기화하는 방식이다.

4*3 배열의 경우 가로의 index에 값이 초기화 되고 난 후 다음 가로의 첫 번째 index에 +3씩 더해지는 규칙이 있다.

(가로의 길이 만큼 더해진다)

이를 이용하여 순서대로 초기화할 수 있다.

 

<코드>

int arData[4][3] = {};
int nData = 0;
int nAdd = 0;
int nPivot = 0;
nData = 1;
nAdd = 1;
nPivot = 3;
for (int i = 0; i < 4; i++) {
	for (int j = 0; j < 3; j++) {
		arData[i][j] = nData;
		nData += nAdd;
	}
	nData -= nAdd;
	nData += nPivot;
	nAdd *= -1;
}
	
for (int i = 0; i < 4; i++) {
	for (int j = 0; j < 3; j++) {
		printf("%2d ", arData[i][j]);
	}
	printf("\n");
}
printf("\n");
반응형

'C' 카테고리의 다른 글

[C/C++][함수]반환형  (0) 2018.01.08
[C][2차원배열]달팽이 배열  (0) 2018.01.02
[C][2차원 배열]홀수 마방진  (0) 2018.01.02
[C][배열] Index 변수  (0) 2018.01.01
[C][배열] indexing 프로그래밍  (0) 2018.01.01