독까의 이야기

문제 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