본문 바로가기
알고리즘

[c 알고리즘] 백준 별찍기 5 (2442번)

by Hyper하이퍼 2023. 1. 7.
반응형

 

오늘도 이어서 별찍기 문제를 알아보도록하겠습니다. 이번 문제는 별을 출력하여 트리 형태의 모양을 나타내는 것입니다.

 

조건은 다음과 같습니다.

1. N을 입력 받아 N번째 줄까지 출력 (1<= N <=100)

2. N 번째 줄에는 2*N-1개 별을 출력하자

 

앞선 문제와 다른 점은 사용자로부터 원하는 출력 줄수를 입력받아 출력해주는 것입니다.

 

언제나 for문을 사용할 때는 하기와 같은 것들이 중요합니다.

  1. 변수들이 담당하는 일이 무엇인지 정확히 판단하기
  2. 변수들의 관계를 파악하여 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문은 앞으로도 정말 많이 사용되기 때문에 

 

활용 방법에 익숙해지시는게 좋습니다.

 

그럼 저는 다음 포스팅으로 찾아 뵙겠습니다. 

반응형