클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

반복문 응용 4 - 피라미드 삼각형 별 찍기 본문

알고리즘 및 자료 관리/알고리즘

반복문 응용 4 - 피라미드 삼각형 별 찍기

huenuri 2024. 8. 24. 22:08

오늘도 별 찍기 문제에 도전해보기로 했다. 어제부터는 별 찍기 문제뿐 아니라 한 주제에 관한 코딩 테스트 문제도 풀고 있다. 별 찍기 문제는 조금 어려워서 매일 내가 할 수 있는 분량만큼 풀어보기로 했다. 조금씩 훈련하는데도 어제보다 조금씩 성장하는 걸 느꼈다.

어제까지만 해도 최대한 많은 문제를 풀어 이 한 페이지에 담으려고 했었다. 하지만 문제를 그냥 풀고 정답을 맞추는 건 별 의미가 없다는 걸 알게 되었다. 한 문제를 풀더라도 확실히 이해해야 다음에 같은 문제를 접해도 스스로 풀 수 있는 것이다.

오늘 풀어볼 문제는 피라미드 삼각형이다. 이 삼각형도 여러 종류가 있으니 하나씩 배우며 학습해보자!


 

 

 

피라미드 삼각형 출력하기 <1358번 응용>

🙂 문제 1번

어떤 수 n을 입력받으면 n줄의 피라미드 삼각형을 출력한다.

 

풀이

#include <stdio.h>

int main(void)
{
	int n;
	scanf_s("%d", &n);

	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n - i; j++)
		{
			printf(" ");
		}
		for (int j = 0; j < 2*i+1; j++)
		{
			printf("*");
		}
		printf("\n");
	}

	return 0;
}

 

 

 

이 문제는 코딩테스트에 없어서 기존의 문제를 약간 변형해서 풀어보았다. 홀수의 별이 출력되어야 하므로 이중 for문에서 이 값을 적용해주면 된다. 근데 한줄의 여백이 띄어져서 나오는데 이 부분을 왜 그런지 잘 모르겠다.
space를 줄여주는 코드도 작성해보았는데 마찬가지였다.


 

 

피라미드 삼각형 출력하기 2 <1358번>

🙂 문제 2번

삼각형 출력하기 5

 

삼각형 출력하기 5

 ※ 불필요한 공백을 출력하면 표현 에러를 유발합니다. .은 공백을 말합니다. ..* .*** *****

codeup.kr

 

어떤 수 n을 입력받으면 다음과 같은 삼각형을 출력한다. 여기서 입력되는 n은 반드시 홀수이다.

##include <stdio.h>

int main(void)
{
	int n, cnt = 0;
	scanf_s("%d", &n);

	for (int i = 0; i < n; i += 2)
	{
		cnt++;
		for (int j = 0; j <= n / 2 - cnt; j++)
		{
			printf(" ");
		}
		for (int j = 0; j <= i; j++)
		{
			printf("*");
		}
		printf("\n");
	}

	return 0;
}

 

 

 

이 문제는 5를 입력하면 별이 5개 출력되게 만들어야 한다. 먼저 3줄이 출력되어야 하므로 i는 2씩 커져야 할 것 같다.
그 다음에 공백은 5를 2로 나누는 것에서 하나씩 줄여주면 공백이 점차 줄어들게 된다.

그런 다음 별이 그만큼 증가하도록 만들어준다.

여기서는 공백이 출력되지 않았다. cnt는 공백을 줄여주는 문자인데 이 문제도 많이 어려워서 다음에 한번 더 풀어보려고 한다.


 

 

다이아몬드 별 출력하기

🙂 문제 3번

다이아몬드 별 찍기 학습 영상

 

 

❓ 문제

가운데 부분이 9개가 되는 다이아몬드 별을 찍는다.

 

##include <stdio.h>

int main(void)
{
	int n, cnt = 0;
	scanf_s("%d", &n);

	for (int i = 0; i < n; i += 2)
	{
		cnt++;
		for (int j = 0; j <= n / 2 - cnt; j++)
		{
			printf(" ");
		}
		for (int j = 0; j <= i; j++)
		{
			printf("*");
		}
		printf("\n");
	}

	return 0;
}

 

 

 

사실 이 문제는 정말 많이 어려웠다. 피라미드 별 찍기 연습을 해서 앞의 모양은 찍을 수 있겠는데, 뒷 부분에 별이 줄어들게 하는 모양은 잘 되지 않았다.

그래서 문제를 할 수 없이 바꾸었다. 원래는 n을 입력하면 이런 모양이 나오도록 하려고 했으나 다음 줄에 7이 어떻게 해서 출력이 되는지 아직 잘 몰랐다.


 

 

학습을 마치고

 

오늘은 별 찍기 문제를 풀기 위해 영상을 4개 정도 시청한 것 같다. 여기 다 올리지는 않았으나 다양한 강사들의 문제 풀이 방식을 보면서 어떤 방식이 더 쉬운지도 조금 알게 되었다.

매일 별 찍기 문제를 풀고 있는데 나중에 응용이 되면 진짜 어려운 모양을 찍는 문제들도 도전해보려고 한다.