2022년 5월 26일에 작성됨
https://codeup.kr/problem.php?id=1370
지그재그 출력하기
높이 h와 반복휫수 r이 주어질때, 별을 다음과 같이 지그재그로 출력하자. 예) 3 2 * * * * * * * * * *
codeup.kr
문제 분석
높이 h(초록색), 반복 횟수 r(파란색) 을 입력했을 때, 별이 지그재그로 출력되도록 한다.
중첩 for문을 사용한다.
소스 코드 (⭕)
#include <stdio.h>
int main(void)
{
int h, r; // 높이와 반복 횟수 변수 선언
int i, j, k; // 삼중중첩문 활용 변수
scanf("%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문제를 이해했다니.. 굉장히 비효율적 이었지만 그만큼 정말 보람 있는 시간이었다.
그래도 이런 과정을 겪고 나니 확실히 전보다 실력은 조금 올라갔지 않나 싶다.
'코딩테스트 & 문제 풀이' 카테고리의 다른 글
[C]코드업_1095 : [기초-1차원배열] 이상한 출석 번호 부르기3 (1) | 2023.04.25 |
---|---|
[C]코드업_1093 : [기초-1차원배열] 이상한 출석 번호 부르기1 (0) | 2023.04.24 |
[C]코드업_1074 : [기초-반복실행구조] 정수 1개 입력받아 카운트다운 출력하기1 (2) | 2023.04.22 |
[C]코드업_1071 : [기초-반복실행구조] 0 입력될 때까지 무한 출력하기1 (0) | 2023.04.22 |
[C]백준_10872 : 팩토리얼 (0) | 2023.04.21 |