C언어 기초: 중첩 for문 예제

kevinkim2586·2020년 4월 19일
0

C언어

목록 보기
13/23
post-thumbnail

다음 예제는 중첩 for문을 이용한 출력 예제다. 함수를 배우기 이전에도 다양한 for문을 이용한 출력 예제를 풀어보았지만 이번꺼는 살짝 애를 먹었다.

우선 문제부터 보자.

사용자로부터 양의 정수 하나를 입력 받으면, 해당 숫자애 맞게 빈칸과 별이 일정한 규칙을 가지고 트리 형태로 출력이 된다. 각 행마다 별이 출력되고 나서는 이후에 공백이 없다.

처음에는 어찌해야할지 몰라 꽤 생각을 오래했다. 그러나 출력 예제를 보면서 규칙을 하나하나 찾으니 어느 정도 문제를 풀 수 있을 것 같았다.

예를 들어, 5를 입력 받으면 첫 번재 행에서는 공백 4개, 그리고 그 다음에 별이 하나 출력이 된다. 그 다음 행에서는 공백 3개, 그 다음에 별이 3개 출력 된다. 행은 총 5개이고, 행이 하나마다 별이 2개씩 일정하게 증가하는 것을 알 수 있었다.

이때부터 대강 for문이 3개 정도 들어가겠구나라는 생각이 잡혔다. 첫 번째 for문은 0부터 사용자 입력까지, 두 번째 for문은 공백 출력용 for문, 세 번째 for문은 별 출력용 for문으로 말이다.

우선 아래 손코딩부터 보자.

blank와 star 함수가 있는 것이 조금 특이하다면 특이하다라고 할 수 있겠다. 두 번째 for문이 한 번 돌고나서는 공백 출력이 하나씩 줄어야하기 때문에 그것을 명시할 수 있는 blank 함수를 두었고, 이와 비슷한 개념으로 star 변수도 선언하였다. 앞서 이야기 한 것처럼 별 출력이 매번 2개씩 늘어나니, for문이 돌고나서는 star 변수를 +2 해주었다.

그럼 최종 코드르 보자:


#include <stdio.h>


void printStar(int n);

int main(void) {
    
    int num=0;
    
    scanf("%d", &num);
    
    printStar(num);
    
    return 0;
}

void printStar(int n){
    
    int star=1;
    int blank=n-1;
    
    for(int i=0;i<n;i++){
        
        for(int j=blank;j>0;j--){
            printf(" ");
        }
        blank=blank-1;
        
        for(int k=1;k<=star;k++){
            printf("*");
        }
        star+=2;
        printf("\n");
    }
    return;
}
profile
공개적으로 학습하고자 만든 블로그

0개의 댓글