[C]코드업_1370 : 지그재그 출력하기

Alal11·2022년 5월 26일
0
post-thumbnail

출처

https://codeup.kr/problem.php?id=1370


문제

높이 h와 반복휫수 r이 주어질때, 별을 다음과 같이 지그재그로 출력하자.

예) 3 2


입력

높이 h과 반복횟수 r가 한줄에 주어진다.(1<= h, r<=40)


출력

지그재그로 출력한 모습을 출력한다.


➡️문제 분석


높이 h(초록색), 반복횟수 r(파란색) 을 입력했을 때, 별이 지그재그로 출력되도록 한다.
중첩 for문을 사용한다.


➡️코드(⭕)

#include <stdio.h>

int main(void)
{
	int h, r;			// 높이와 반복 횟수 변수 선언
	int i, j, k;		// 삼중중첩문 활용 변수

	scanf_s("%d %d", &h, &r);

	for (k = 1; k <= r; k++) {		// for문을 이용해 반복 횟수 만큼 반복
		for (i = 1; i <= h; i++) {		// 별 계단 높이 증가
			for (j = 1; j < i; j++) {
				printf(" ");
			}
			printf("*\n");
		}
		for (i = h - 2; i >= 0; i--) {		// 별 계단 높이 감소
			for (j = 0; j < i; j++) {
				printf(" ");
			}
			printf("*\n");
		}
	}
	return 0;
}

<코드 분석>

h가 3, r이 2라고 가정해보자.
1번 for문은 노란색 두 묶음을 한 세트로 하는 것의 반복횟수이다. r이 2이면 k=1, k=2일 때만 식이 성립하므로 1번 for문은 총 2번 반복한다.


그 다음 2번, 3번 for문을 살펴보자.
2번 for문에서 i=1, h=3일 때 조건이 성립하므로 3번 for문으로 들어온다. j=1, i=1일 때는 조건 성립이 되지 않아서 3번 for문을 빠져나와 printf("*\n");이 적용되고, 2번 for문으로 돌아와 i 값을 올려준다.

i=2, h=3일 때 조건 성립하므로 3번 for문으로 들어오고, j=1, i=2일 때 조건 성립 하므로 printf(" ");이 적용된다.

그 다음 j 값을 올려주면 j=2, i=2일 때 조건 성립이 되지 않아 3번 for문을 빠져나와 printf("*\n");이 적용되고 다시 2번 for문으로 돌아온다.

i 값을 올려주고 i=3, h=3일 때 식 성립하여 3번 for문으로 들어오고 i=3이면 j=1, j=2일 때 식 성립하여 printf(" ");2번 적용되고 빠져나와 printf("*\n");이 적용되고 다시 2번 for문으로 돌아온다.

i=4, h=3일 때는 조건 성립이 되지 않아 2번 for문을 빠져나오고 4번 for문으로 넘어간다.


i의 초깃값은 3-2=1이고, 조건 성립하므로 5번 for문으로 들어와서 j=0, i=1일 때 조건 성립하므로 printf(" ");가 적용되고, j=1, i=1일 때 조건 성립 하지 않으므로 빠져나와 printf("*\n");이 적용된 다음, 4번 for문으로 돌아와 i=0이 되어 조건 성립하므로 5번 for문으로 들어간다.


j=0, i=0은 조건 성립이 되지 않아서 빠져나와 printf("*\n");이 적용되고 다시 4번 for문으로 돌아온다.

i=-1이 되어 조건을 성립하지 않으므로 4번 for문을 빠져나와 1번 for문으로 가서 위의 과정을 한 번 더 반복하고, k=3일 때는 조건 성립하지 않으므로 1번 for문을 빠져나와 return 0을 만나서 프로그램은 완전히 종료된다.


<코드 결과>

printf("*\n");
printf(" ");
printf("*\n");
printf(" ");
printf(" ");
printf("*\n");
ㅡㅡㅡㅡ
printf(" ");
printf("*\n");
printf("*\n");
을 두 번 반복한다.


➡️end

이 문제를 봤을 때 혼자 코드를 짤 실력이 부족하다고 생각되어 검색을 통해 코드를 만드는 데 참고했다.
처음에는 완성된 코드를 봐도 무슨 의미인지 하나도 이해하지 못해서 for문을 다시 공부하고 다른 분들의 코드와 해설도 참고하여 이해해 볼려고 노력했다.
그러다 보니 조금씩 감이 오기 시작했지만 완전히 이해하지는 못하여 그냥 값을 지정해놓고 직접 처음부터 차근차근 해석해 보기로 했다.
천천히 과정을 따라 적어본 결과 드디어 이 코드를 완전히 이해할 수 있었다..
며칠 동안 코드를 짜고, 다시 공부하고, 하기 싫어서 미루기도 하고, 고민한 다음, 오늘에서야 1문제를 이해했다니.. 굉장히 비효율적 이었지만 그만큼 정말 보람 있는 시간이었다.
그래도 이런 과정을 겪고 나니 확실히 전보다 실력은 조금 올라갔지 않나 싶다.

0개의 댓글