삼각형이 반복문을 연습하는데 가장 기초적이면서 재밌는 알고리즘입니다.
오늘은 해당 알고리즘의 개념과 코드에 대해 공부해보겠습니다.
개념
가상의 공간이 있습니다. 우리는 오늘 이 공간을 활용하여 별을 만들어 볼것입니다.
먼저 입력한 가로의 줄 갯수입니다. 예를들어 5를 입력했다고 치면 5개만큼의 가로줄이 생기게 됩니다.
별을 5개 찍게된다면 기본적으로 이런 형식으로 나오게 될것입니다. 우리는 여기서 i와 별의 갯수의 관계를 찾을 수 있습니다.
자세히 보시면 i만큼 별이 찍히는게 보이십니까?
즉 j(별의갯수)는 i만큼만 출력하면 반삼각형이 만들어 진다는 법칙을 찾게 되었습니다.
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <stdio.h> int main() { int i, j; /* i: 가로라인 계산, j: 별갯수 계산 */ int line; /* 입력받을 수를 저장할 변수 */ printf("입력"); scanf("%d", & line); for (i = 0; i < line; i++) /* 입력받은 수 만큼 가로라인 계산 */ { for (j = 0; j <= i; j++) /* 별의 갯수를 라인수에 맞춰 출력 */ { printf("*"); } printf("\n"); } } | cs |
for (i = 0; i < line; i++) 해석하자면. i를 0번째 줄부터 입력한수만큼 줄을 만들어라
그 줄하나에 for (j = 0; j <= i; j++)을 사용하여 i만큼의 별을 찍어내라
실행화면 - 입력
실행화면 - 출력
응용하여 반대로된 삼각형도 만들어 보겠습니다
개념
반대로된 삼각형은 응용한 것이기 때문에 위에 있는 삼각형보다 약간 생각을 더 해야 합니다.
일단은 i의 개념은 똑같습니다.
여기서 생각해 줘야 할것은 공백을 생각해줘야 모양이 나온다는 것입니다.
공백을j, 별을 k라고 생각하겠습니다.
여기서 규칙성을 찾으시면 되는데 이해가 안가시는분은 아래로 내려오시면 됩니다.
찾으셨나요?
i는 1,2,3,4,5
j는 4,3,2,1,0
k는 1,2,3,4,5
로 가고있습니다.
즉 i와 k는 같다. i=k
j=i-1 or k-1로 사용해도 될것 같습니다.
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <stdio.h> int main() { int i, j, k; /* i: 가로라인 계산, j: 공백의 수 계산, k: 별의 수 계산 */ int line; /* 입력받은 만큼 저장하는 변수 */ printf("입력"); /* 입력을 콘솔창에 알려주기 위한 설명 출력 */ scanf("%d", & line);/* 사용자에게 별의 갯수를 입력받는 코드 */ for (i = 0; i < line; i++) /* 가로라인 계산 */ { for (j = 0; j < line-i; j++) /* 공백의 수 계산 */ { printf(" "); } for (k = 0; k <=i; k++) /* 별의 수 계산 */ { printf("*"); } printf("\n"); /* 가로라인이 한번 끝나면 줄바꿈 */ } } | cs |
line이 5를 입력했을때 맨 처음 가로줄의 i는 1이됩니다.
즉 line = 5
i = 1
그렇다면 맨 처음줄에는 공백이 4개와야겠죠?
그래서 5-1=4개 즉 line-i가 되는겁니다.
실행화면 - 입력
실행화면 - 출력
'프로그래밍 > C++' 카테고리의 다른 글
[C++] C언어 함수(function)의 구성, 정의 기초 개념잡기 (0) | 2017.03.07 |
---|---|
[C++] 입력한 수만큼 뒤집어진 반삼각형 별찍기 (for문 반복문 예제) (2) | 2017.03.01 |