반응형
오늘도 이어서 별찍기 문제를 알아보도록하겠습니다. 이번 문제는 별을 출력하여 트리 형태의 모양을 나타내는 것입니다.
조건은 다음과 같습니다.
1. N을 입력 받아 N번째 줄까지 출력 (1<= N <=100)
2. N 번째 줄에는 2*N-1개 별을 출력하자
앞선 문제와 다른 점은 사용자로부터 원하는 출력 줄수를 입력받아 출력해주는 것입니다.
언제나 for문을 사용할 때는 하기와 같은 것들이 중요합니다.
- 변수들이 담당하는 일이 무엇인지 정확히 판단하기
- 변수들의 관계를 파악하여 for문에서 이용하기
위 내용이 생소하신 분들은 아래 링크에 가셔서 한번 읽고 오시면 도움이 됩니다.
2023.01.04 - [분류 전체보기] - [c언어] 2중 for문
이번 문제도 변수들의 관계를 파악하여 for문에 적용시키는게 관건인 문제였습니다.
관계를 파악해보면 다음과 같습니다.
반응형
- 1번 째 줄에는 별이 1개 출력
- 2번 째 줄에는 별이 3개 출력
- 3번 째 줄에는 별이 5개 출력
- N번 째 줄에는 별이 2 x N - 1개 출력
별 관련 출력은 문제에서도 주어져 있기 때문에 비교적 쉽게 구할 수 있습니다.
- 1번 째 줄에는 공백이 4개 출력
- 2번 째 줄에는 공백이 3개 출력
- 3번 째 줄에는 공백이 2개 출력
- N번 째 줄에는 공백이 (N - x번째 라인)개 출력
이렇게 예를 들어 하나씩 맞춰나가면서 관계를 파악해야합니다. 그럼 관계 파악도 끝났으니 코드로 작성해보겠습니다.
(코드는 0부터 시작 되기 때문에 횟수 맞추는 것에 주의하세요!!)
#include <stdio.h>
void main(void)
{
int l; // 라인 관련 변수
int b; // 공백 관련 변수
int s; // 별 출력 관련 변수
int N; // 입력 받은 수
scanf("%d", &N); // 출력할 줄 수 입력받기
for (l = 0; l < N; l++) // 라인 수는 입력받은 N회 출력
{
for (b = 0; b < N - l - 1; b++) // 공백은 N회 라인 출력 당 x 번째 줄 보다 하나 작게 출력
{
printf(" ");
}
// 주의! 공백과 별은 한 줄에 출력 되기 때문에 for문을 중첩으로 사용하지 않는다
// 즉 공백 출력 for문안에 별 출력 for문을 넣지 않게 주의가 필요하다
for (s = 0; s < 2 * l + 1; s++) // x번째 줄의 2배보다 하나 더 크게 출력해준다.
{
printf("*");
}
printf("\n");
}
}
오늘은 2중 for문을 사용하여 별을 출력하는 문제를 살펴보았습니다. 2중 for문은 앞으로도 정말 많이 사용되기 때문에
활용 방법에 익숙해지시는게 좋습니다.
그럼 저는 다음 포스팅으로 찾아 뵙겠습니다.
반응형
'알고리즘' 카테고리의 다른 글
[c 알고리즘] 1169 정올 주사위 던지기 1 문제 해설 (0) | 2023.01.11 |
---|---|
[c 알고리즘] DFS(Depth First Search)란 무엇인가? (0) | 2023.01.11 |
[c 알고리즘] 백준 별찍기4 (2441번) (0) | 2023.01.07 |
[c언어 알고리즘] 백준 별찍기3 (2440번) 해설 (0) | 2023.01.06 |
[c 알고리즘] 백준 7576 토마토 문제 해설 (2) | 2023.01.05 |