ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [알고리즘/C언어] 도형 알고리즘 / 직각삼각형 채우기 (정보처리기사, 실기)
    Algorithm 2019. 5. 25. 21:23

    직각삼각형 숫자 채우기 (1)

      0    0    0    0

    2    3    0    0    0

    4    5    6    0    0

    7    8    9   10   0

    11  12  13  14   15

     

    직각삼각형 모양으로 숫자 채워넣는 문제는

    먼저 표로 행과 열의 인덱스 번호를 써보면 쉽게 만들 수 있다.

     

      i (row) j (column start) j (column end)
    1    0    0    0    0 0 0 0
    2    3    0    0    0 1 0 1
    4    5    6    0    0 2 0 2
    7    8    9   10   0 3 0 3
    11  12  13  14   15 4 0 4

     

    일단 위 표와 같이 행의 인덱스 번호는 0 1 2 3 4 이다.

    숫자가 써지는 영역의 시작 인덱스는 0으로 고정이고

    끝 인덱스는 행의 인덱스 번호와 동일하게 0 1 2 3 4 로 1씩 증가한다.

     

    0행일 때, 열 번호가 0번부터 0번일 때까지 숫자가 써져야하고,

    1행일 때는 열 번호가 0번부터 1번일 때까지,

    2행일 때는 열 번호가 0번부터 2번일 때까지, ...

     

    이런식이므로 i가 1씩 증가하며 반복하는 반복문 안에서

    j를 0부터 i와 작거나 같을 때까지 반복하도록 코드를 작성하면 된다.

     

    #include <stdio.h>
    #define NUM 5
    int main() {
    	int  i, j, k=0;
    	int arr1[NUM][NUM] = { 0 };
    	for (i = 0; i < NUM; i++) {
    		for (j = 0; j <= i; j++) {
    			k = k + 1;
    			arr1[i][j] = k;
    		}
    	}
    	printf("--직각삼각형 도형 채우기-1  출력--\n");
    	for (i = 0; i < NUM; i++) {
    		for (j = 0; j < NUM; j++) {
    			printf("%3d", arr1[i][j]);
    		}
    		printf("\n");
    	}
    
    	printf("\n");
    	system("pause");
    	return 0;
    }

     

    실행결과

     

     


    직각삼각형 숫자 채우기 (2)

    0    0    0    0    1

    0    0    0    2    3

    0    0    4    5    6

    0    7    8    9   10

    11  12  13  14   15

     

      i (row) j (column start) j (column end)
    0    0    0    0    1 0 4 4
    0    0    0    2    3 1 3 4
    0    0    4    5    6 2 2 4
    0    7    8    9   10 3 1 4
    11  12  13  14   15 4 0 4

     

    이번에는 열이 모두 4번 칸에서 끝나고

    열의 시작점이 4 3 2 1 0으로 행의 인덱스 번호와 반대이다.

     

    즉, i가 0부터 4까지 반복할 때,

    j는 4 - i부터 4까지 반복을 해야 한다.

     

    #include <stdio.h>
    #define NUM 5
    int main() {
    	int  i, j, k = 0;
    	int arr1[NUM][NUM] = { 0 };
    	for (i = 0; i < NUM; i++) {
    		for (j = (NUM - 1) - i; j < NUM; j++) {
    			k = k + 1;
    			arr1[i][j] = k;
    		}
    	}
    	printf("--직각삼각형 도형 채우기-1  출력--\n");
    	for (i = 0; i < NUM; i++) {
    		for (j = 0; j < NUM; j++) {
    			printf("%3d", arr1[i][j]);
    		}
    		printf("\n");
    	}
    
    	printf("\n");
    	system("pause");
    	return 0;
    }

     

    실행결과

     

     

     


    직각삼각형 숫자 채우기 (3)

    1    2    3    4    5

    0    6    7    8    9

    0    0   10  11   12

    0    0    0   13   14

    0    0    0    0   15

     

      i (row) j (column start) j (column end)
    1    2    3    4    5 0 0 4
    0    6    7    8    9 1 1 4
    0    0   10  11   12 2 2 4
    0    0    0   13   14 3 3 4
    0    0    0    0   15 4 4 4

     

    이번에는 i가 0부터 4까지 반복할 때,

    j가 i부터 4까지 반복한다.

     

    #include <stdio.h>
    #define NUM 5
    int main() {
    	int  i, j, k = 0;
    	int arr1[NUM][NUM] = { 0 };
    	for (i = 0; i < NUM; i++) {
    		for (j = i; j < NUM; j++) {
    			k = k + 1;
    			arr1[i][j] = k;
    		}
    	}
    	printf("--직각삼각형 도형 채우기-1  출력--\n");
    	for (i = 0; i < NUM; i++) {
    		for (j = 0; j < NUM; j++) {
    			printf("%3d", arr1[i][j]);
    		}
    		printf("\n");
    	}
    
    	printf("\n");
    	system("pause");
    	return 0;
    }

     

    실행결과

     

     

     


    직각삼각형 숫자 채우기 (4)

    1    2    3    4    5

    6    7    8    9    0

    10  11   12  0    0

    13  14   0    0    0

    15   0    0    0    0

     

      i (row) j (column start) j (column end)
    1    2    3    4    5 0 0 4
    6    7    8    9    0 1 0 3
    10  11   12  0    0 2 0 2
    13  14   0    0    0 3 0 1
    15   0    0    0    0 4 0 0

     

    이번에는 i가 0부터 4까지 반복할 때,

    j는 0부터 4 - i 만큼 반복한다.

     

    #include <stdio.h>
    #define NUM 5
    int main() {
    	int  i, j, k = 0;
    	int arr1[NUM][NUM] = { 0 };
    	for (i = 0; i < NUM; i++) {
    		for (j = 0; j < NUM - i; j++) {
    			k = k + 1;
    			arr1[i][j] = k;
    		}
    	}
    	printf("--직각삼각형 도형 채우기-1  출력--\n");
    	for (i = 0; i < NUM; i++) {
    		for (j = 0; j < NUM; j++) {
    			printf("%3d", arr1[i][j]);
    		}
    		printf("\n");
    	}
    
    	printf("\n");
    	system("pause");
    	return 0;
    }

     

    실행결과

     

    반응형

    COMMENT