반복문을 사용하여 삼각형 그리기 (C 삼각형, C 다이아몬드)
프로그램 공부/C 2018. 12. 7. 15:11
문제 1 (난이도 : 中)
N 줄인 삼각형을 출력한다. 단, 사용자로 부터 임의의 N 을 입력 받는다. 아래는 N = 3 일 때의 출력 예시 이다.
*
**
***
# 접근 1.
다른 강좌나 게시글을 보면, 출력 결과물에 대한 설명이 부족해서 이해가 잘 안갔다.
수학을 가르치지만 프로그래밍은 다룬적 없는 와이프에게 수학적으로 설명을 해달라고 부탁했다.
와이프는 수식을 보고 수기로 풀어 보더니 금방 이해가 되었다고 했다.
아이들에게 가르치는 방식으로 설명을 요청했다.
별(*) 에 대한 개념을 수로 바꾸어서 표현하니 이해가 쉬웠다.
#include <stdio.h> int main() { int i, j, input; printf("몇 줄 짜리 삼각형? : "); scanf_s("%d", &input); for (i = 1; i <= input; i++) { printf("i = %d : ", i); for (j = 1; j <= i; j++) printf("*"); printf("\n"); } printf("최종 i 값 = %d", i); return 0; } | #include <stdio.h> int main() { int i, j, input; printf("몇 줄 짜리 삼각형? : "); scanf_s("%d", &input); for (i = 1; i <= input; i++) { printf("i = %d : ", i); for (j = 1; j <= i; j++) printf("%d", j); printf("\n"); } printf("최종 i 값 = %d", i); return 0; } |
몇 줄 짜리 삼각형? : 5 i = 1 : * i = 2 : ** i = 3 : *** i = 4 : **** i = 5 : ***** 최종 i 값 = 6 | 몇 줄 짜리 삼각형? : 5 i = 1 : 1 i = 2 : 12 i = 3 : 123 i = 4 : 1234 i = 5 : 12345 최종 i 값 = 6 |
#include <stdio.h> int main() { int i, j, input; printf("몇 줄 짜리 삼각형? : "); scanf_s("%d", &input); for (i = input; i >= 1; i--) { printf("i = %d : ", i); for (j = 1; j <= i; j++) printf("*"); printf("\n"); } printf("최종 i 값 = %d", i); return 0; } | #include <stdio.h> int main() { int i, j, input; printf("몇 줄 짜리 삼각형? : "); scanf_s("%d", &input); for (i = input; i >= 1; i--) { printf("i = %d : ", i); for (j = 1; j <= i; j++) printf("%d", j); printf("\n"); } printf("최종 i 값 = %d", i); return 0; } |
몇 줄 짜리 삼각형? : 5 i = 5 : ***** i = 4 : **** i = 3 : *** i = 2 : ** i = 1 : * 최종 i 값 = 0 | 몇 줄 짜리 삼각형? : 5 i = 5 : 12345 i = 4 : 1234 i = 3 : 123 i = 2 : 12 i = 1 : 1 최종 i 값 = 0 |
위 두 수식의 차이점은
for (i = 1; i <= input; i++) / for (i = input; i >= 1; i--)
외에는 없다.
위에서 아래로 늘어나는 삼각형을 역순으로 만들려면 적용 방식을 역순으로 하면 된다.
이렇게 설명을 해주었으면 좋았을 텐데, 강좌나 게시들에서는 "문제, 답" 이렇게만 적어놔서 조금 아쉽다.
# 접근 2.
우측 정렬 된 삼각형을 만들어보자.
#include <stdio.h> int main() { int i, j, input; printf("몇 줄 짜리 삼각형? : "); scanf_s("%d", &input); for (i = input; i >= 1; i--) { printf("i = %d : ", i); for (j = input; j > i; j--) printf(" "); for (j = 1; j <= i; j++) printf("*"); printf("\n"); } printf("최종 i 값 = %d", i); return 0; } | #include <stdio.h> int main() { int i, j, input; printf("몇 줄 짜리 삼각형? : "); scanf_s("%d", &input); for (i = input; i >= 1; i--) { printf("i = %d : ", i); for (j = input; j > i; j--) printf(" "); for (j = 1; j <= i; j++) printf("%d", j); printf("\n"); } printf("최종 i 값 = %d", i); return 0; } | #include <stdio.h> int main() { int i, j, input; printf("몇 줄 짜리 삼각형? : "); scanf_s("%d", &input); for (i = input; i >= 1; i--) { printf("i = %d : ", i); for (j = input; j > i; j--) printf("%d", j); for (j = 1; j <= i; j++) printf("%d", j); printf("\n"); } printf("최종 i 값 = %d", i); return 0; } |
몇 줄 짜리 삼각형? : 5 i = 5 : ***** i = 4 : **** i = 3 : *** i = 2 : ** i = 1 : * 최종 i 값 = 0 | 몇 줄 짜리 삼각형? : 5 i = 5 : 12345 i = 4 : 1234 i = 3 : 123 i = 2 : 12 i = 1 : 1 최종 i 값 = 0 | 몇 줄 짜리 삼각형? : 5 i = 5 : 12345 i = 4 : 51234 i = 3 : 54123 i = 2 : 54312 i = 1 : 54321 최종 i 값 = 0 |
#include <stdio.h> int main() { int i, j, input; printf("몇 줄 짜리 삼각형? : "); scanf_s("%d", &input); for (i = 1; i <= input; i++) { printf("i = %d : ", i); for (j = input; j > i; j--) printf(" "); for (j = 1; j <= i; j++) printf("*"); printf("\n"); } printf("최종 i 값 = %d", i); return 0; } | #include <stdio.h> int main() { int i, j, input; printf("몇 줄 짜리 삼각형? : "); scanf_s("%d", &input); for (i = 1; i <= input; i++) { printf("i = %d : ", i); for (j = input; j > i; j--) printf(" "); for (j = 1; j <= i; j++) printf("%d", j); printf("\n"); } printf("최종 i 값 = %d", i); return 0; } | #include <stdio.h> int main() { int i, j, input; printf("몇 줄 짜리 삼각형? : "); scanf_s("%d", &input); for (i = 1; i <= input; i++) { printf("i = %d : ", i); for (j = input; j > i; j--) printf("%d", j); for (j = 1; j <= i; j++) printf("%d", j); printf("\n"); } printf("최종 i 값 = %d", i); return 0; } |
몇 줄 짜리 삼각형? : 5 i = 1 : * i = 2 : ** i = 3 : *** i = 4 : **** i = 5 : ***** 최종 i 값 = 6 | 몇 줄 짜리 삼각형? : 5 i = 1 : 1 i = 2 : 12 i = 3 : 123 i = 4 : 1234 i = 5 : 12345 최종 i 값 = 6 | 몇 줄 짜리 삼각형? : 5 i = 1 : 54321 i = 2 : 54312 i = 3 : 54123 i = 4 : 51234 i = 5 : 12345 최종 i 값 = 6 |
# 접근 3.
피라미드형 삼각형을 만들어보자.
#include <stdio.h> int main() { int i, j, input; printf("몇 줄 짜리 삼각형? : "); scanf_s("%d", &input); for (i = 1; i <= input; i++) { printf("i = %d : ", i); for (j = input; j > i; j--) printf(" "); for (j = 1; j < i * 2; j++) printf("*"); printf("\n"); } printf("최종 i 값 = %d", i); return 0; } | #include <stdio.h> int main() { int i, j, input; printf("몇 줄 짜리 삼각형? : "); scanf_s("%d", &input); for (i = 1; i <= input; i++) { printf("i = %d : ", i); for (j = input; j > i; j--) printf(" "); for (j = 1; j < i * 2; j++) printf("%d", j); printf("\n"); } printf("최종 i 값 = %d", i); return 0; } | #include <stdio.h> int main() { int i, j, input; printf("몇 줄 짜리 삼각형? : "); scanf_s("%d", &input); for (i = 1; i <= input; i++) { printf("i = %d : ", i); for (j = input; j > i; j--) printf("%d", j); for (j = 1; j < i * 2; j++) printf("%d", j); printf("\n"); } printf("최종 i 값 = %d", i); return 0; } |
몇 줄 짜리 삼각형? : 5 i = 1 : * i = 2 : *** i = 3 : ***** i = 4 : ******* i = 5 : ********* 최종 i 값 = 6 | 몇 줄 짜리 삼각형? : 5 i = 1 : 1 i = 2 : 123 i = 3 : 12345 i = 4 : 1234567 i = 5 : 123456789 최종 i 값 = 6 | 몇 줄 짜리 삼각형? : 5 i = 1 : 54321 i = 2 : 543123 i = 3 : 5412345 i = 4 : 51234567 i = 5 : 123456789 최종 i 값 = 6 |
#include <stdio.h> int main() { int i, j, input; printf("몇 줄 짜리 삼각형? : "); scanf_s("%d", &input); for (i = input; i >= 1; i--) { printf("i = %d : ", i); for (j = input; j > i; j--) printf(" "); for (j = 1; j < i * 2; j++) printf("*"); printf("\n"); } printf("최종 i 값 = %d", i); return 0; } | #include <stdio.h> int main() { int i, j, input; printf("몇 줄 짜리 삼각형? : "); scanf_s("%d", &input); for (i = input; i >= 1; i--) { printf("i = %d : ", i); for (j = input; j > i; j--) printf(" "); for (j = 1; j < i * 2; j++) printf("%d", j); printf("\n"); } printf("최종 i 값 = %d", i); return 0; } | #include <stdio.h> int main() { int i, j, input; printf("몇 줄 짜리 삼각형? : "); scanf_s("%d", &input); for (i = input; i >= 1; i--) { printf("i = %d : ", i); for (j = input; j > i; j--) printf("%d", j); for (j = 1; j < i * 2; j++) printf("%d", j); printf("\n"); } printf("최종 i 값 = %d", i); return 0; } |
몇 줄 짜리 삼각형? : 5 i = 5 : ********* i = 4 : ******* i = 3 : ***** i = 2 : *** i = 1 : * 최종 i 값 = 0 | 몇 줄 짜리 삼각형? : 5 i = 5 : 123456789 i = 4 : 1234567 i = 3 : 12345 i = 2 : 123 i = 1 : 1 최종 i 값 = 0 | 몇 줄 짜리 삼각형? : 5 i = 5 : 123456789 i = 4 : 51234567 i = 3 : 5412345 i = 2 : 543123 i = 1 : 54321 최종 i 값 = 0 |
# 접근 4.
다이아몬드 형태를 만들어 보자.
정방향과 역방향을 합치고 중복되는 정가운데를 상쇄하면 될 것 같다.
int main() { int i, j, input; printf("가장 긴 행의 수 입력 : "); scanf_s("%d", &input); for (i = 1; i <= input; i++) { printf("i = %d : ", i); for (j = input; j > i; j--) printf(" "); for (j = 1; j < i * 2; j++) printf("*"); printf("\n"); if (i == input) { for (i = input - 1; i >= 1; i--) { printf("i = %d : ", i); for (j = input; j > i; j--) printf(" "); for (j = 1; j < i * 2; j++) printf("*"); printf("\n"); } break; // 조건 완료시 중지를 하지 않으면 무한루프 발생 } } printf("최종 i 값 = %d", i); return 0; } |
가장 긴 행의 수 입력 : 5 i = 1 : * i = 2 : *** i = 3 : ***** i = 4 : ******* i = 5 : ********* i = 4 : ******* i = 3 : ***** i = 2 : *** i = 1 : * 최종 i 값 = 0 |