-
[알고리즘/C언어] 도형 알고리즘 / 직각삼각형 채우기 (정보처리기사, 실기)Algorithm 2019. 5. 25. 21:23
직각삼각형 숫자 채우기 (1)
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; }
반응형'Algorithm' 카테고리의 다른 글
[알고리즘/자바스크립트] 재귀를 이용한 배열 요소 개수 구하기 (Array Deep Count) (734) 2019.06.07 [알고리즘/자바스크립트] 중복값 없는 랜덤 숫자 추출하는 여러가지 방법 / 로또번호 생성기 (2526) 2019.06.03 [알고리즘/C언어] 도형 알고리즘 / 사각형 ㄹ자 채우기 (정보처리기사, 실기) (0) 2019.05.24 [알고리즘/C언어] 수열의 합 알고리즘(5) / Sum = (1 * 10) + (2 * 9) + (3 * 8) + ... + (10 * 1) (정보처리기사, 실기) (0) 2019.05.24 [알고리즘/C언어] 수열의 합 알고리즘(4) / 합과 차 반복 (정보처리기사, 실기) (0) 2019.05.24 COMMENT