본문 바로가기
Algorithm

[Algorithm] 배열 채우기

by Jamie Lim 2020. 12. 2.

1. 대각선

#include "stdio.h"

int main() {
	int A[5][5];     // 행 열이 각각 5인 배열 A 선언
	int num = 0;     // 배열 A에 값을 넣어줄 변수

	for (int i = 0; i < 5; i++) {       // 삼각형 #1
		for (int j = 0; j <= i; j++) {
			num++;   // num + 1
			A[i - j][j] = num;  // 배열 원소에 num 할당
		}
	}

	for (int i = 1; i < 5; i++) {       // 삼각형 #2
		for (int j = 0; j < 5 - i; j++) {
			num++;   // num + 1
			A[4 - j][j + i] = num;     // 배열 원소에 num 할당
		}
	}

	for (int i = 0; i < 5; i++) {      // 배열 출력
		for (int j = 0; j < 5; j++) {
			printf("%2d ", A[i][j]);
		}

		printf("\n");
	}
}

 

2. 지그재그

#include "stdio.h"

int main() {
	int A[5][5];     // 행 열이 각각 5인 배열 A 선언
	int num = 0;     // 배열 A에 값을 넣어줄 변수

	for (int i = 0; i < 5; i++)       // 삼각형 #1
	{
		for (int j = 0; j <= i; j++)
		{
			num++;   // num + 1

			if (i % 2 == 0)              // i가 짝수라면
				A[j][i - j] = num;   // A(j, i - j)에 num 할당

			else                         // i가 홀수라면 
				A[i - j][j] = num;   // A(1 - j, j)에 num 할당
		}
	}

	for (int i = 1; i < 5; i++)       // 삼각형 #2
	{
		for (int j = 0; j < 5 - i; j++)
		{
			num++;   // num + 1

			if (i % 2 == 0)                  // i가 짝수라면
				A[j + i][4 - j] = num;   // A(j + i, 4 - j)에 num 할당

			else                             // i가 홀수라면 
				A[4 - j][j + i] = num;   // A(1 - j, j)에 num 할당
		}
	}

	for (int i = 0; i < 5; i++)         // 배열 출력
	{
		for (int j = 0; j < 5; j++)
		{
			printf("%2d ", A[i][j]);
		}

		printf("\n");
	}
}

 

3. 역 달팽이

#include "stdio.h"

int main() {
	int A[5][5];               // 행 열이 각각 5인 배열 A 선언
	int num = 25;              // 배열 A에 값을 넣어줄 변수 (역순으로 저장할 것이라 25로 초기화)
	int count = 5;             // 배열에 숫자를 배정하는 수행 횟수
	int i = -1, j = 0, S = 1;  // 배열의 행, 열, 증감을 표현한 변수

	while (1) {
		for (int P = 0; P < count; P++) {  // count만큼 반복한다
			i += S;           // 행 번호 i에 S만큼 추가 (1 or -1)
			A[i][j] = num;    // A(i, j)에 num 할당
			num--;            // num - 1
		}

		count--;         // count - 1
		if (count <= 0)  // count가 0이 되면
			break;   // 반복문을 탈출한다

		for (int P = 0; P < count; P++) {  // count만큼 반복한다
			j += S;           // 열 번호 j에 S만큼 추가 (1 or -1)
			A[i][j] = num;    // A(i, j)에 num 할당
			num--;            // num - 1
		}

		S *= (-1);   // 증감 역할 반전
	}
	
	for (int i = 0; i < 5; i++)         // 배열 출력
	{
		for (int j = 0; j < 5; j++)
		{
			printf("%2d ", A[i][j]);
		}

		printf("\n");
	}
}

댓글