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

반복문 응용 3 - 사각형과 평행사변형 별 찍기 본문

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

반복문 응용 3 - 사각형과 평행사변형 별 찍기

huenuri 2024. 8. 24. 22:02

어제는 삼각형 별 찍기 문제를 풀어보며 반복문을 어느 정도 이해했다. 오늘은 사각형 별 찍기와 삼각형 별 찍기에서 조금 어려운 피라미드 같은 특이한 모양을 찍어볼까 한다.

먼저 사각형 별 찍기가 다소 쉬워보이니 이 문제부터 도전해본다.


 

 

 

🐸 문제 1번

사각형 출력하기 <1352번>

사각형 출력하기 1

 

사각형 출력하기 1

길이 n이 입력되면 길이가 n인 사각형을 출력하시오. 단, 사각형은 * 모양으로 채운다.

codeup.kr

 

❓ 문제

길이 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; j++)
		{
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

 

 

1번 문제는 삼각형 별 찍기를 할 수 있다면 충분히 풀 수 있는 문제였다. 오히려 그 문제보다 더 쉬운 것 같다.
n만큼 계속 증가하도록 하면 된다.


 

 

 

🐸 문제 2번

사각형 출력하기 2 <1356번>

사각형 출력하기 2

 

사각형 출력하기 2

길이 n이 입력되면 다음과 같은 사각형을 출력한다. 예) n이 5일때 ***** * * * * * * *****

codeup.kr

 

❓ 문제

길이 n이 입력되면 다음과 같은 사각형을 출력한다.

예) n이 5일때

*****
*   *
*   *
*   *
*****
#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; j++)
		{
			if (i == 0 || i == n - 1 || j == 0|| j == n - 1)
			{
				printf("*");
			}
			else
				printf(" ");
		}
		printf("\n");
	}

	return 0;
}

 

 

 

이번에는 속이 빈 사각형을 출력하는 건데 다소 어려운 문제이다.
처음에는 이중 for문 안에 또 다른 for문을 사용했으나 그렇게 하니 사각형이 중복으로 더 나타났다.

이럴 때는 if문을 사용해서 어떤 경우에 별이 찍히고, 찍히지 않는지를 만들어주어야 한다.

별이 찍히는 경우는 사각형의 i와 j가 0이나 n일 경우이다. 초기값을 1로 설정하면 n으로 하고, 0으로 하면 n-1로 해주면 된다.


 

 

🐸 문제 3번

별 계단 만들기 <1361번>

별 계단 만들기 1

 

별 계단 만들기

n층의 별 계단을 출력한다.(n이 1일 경우 **을 출력한다.)

codeup.kr

 

❓ 문제

n이 입력되면 n층의 별 계단을 출력하시오.

예) n= 5인 경우,

**
 **
  **
   **
    **
#include <stdio.h>

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

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

	return 0;
}

 

 

 

별 계단을 찍는 문제는 빈 공간이 언제 생기는지 알면 쉽게 풀 수 있다. 공간이 하나씩 늘어나야 하므로 처음 받는 i가 하나씩 줄어들도록 해주었다.

근데 이 부분은 조금 헤깔린다. 처음에는 반대로 생각했었는데, 그렇게 하니 별 계단이 반대 방향으로 만들어졌다. 이건 다음에 한번 더 숙지해야 할 것 같다.


 

 

🐸 문제 4번

별 계단 만들기 2 <1361번 응용>

❓ 문제

n이 입력되면 n층의 별 계단을 반대로 출력하시오.

예) n= 5인 경우,

    **
   **
  **
 **
**
#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 k = 0; k < n - 1; k++)
		{
			printf("*");
		}
		printf("\n");
	}

	return 0;
}

 

 

 

코드업 문제에는 없지만 반대로 하는 별계단도 만들어보았다.


 

 

🐸 문제 5번

평행사변형 출력하기 1 <1367번>

평행사변형 출력하기 1

 

평행사변형 출력하기 1

밑변과 높이가 같은 평행사변형을 출력한다.

codeup.kr

 

❓ 문제

평행사변형의 높이 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 < n; j++)
		{
			printf("*");
		}
		printf("\n");
	}

	return 0;
}

 

 

 

5번 문제는 별 계단 문제와 다르지 않아 보인다. 같은 문제라고 봐도 무방할 정도로 비슷했다.

코드업에서는 이런 이유로 이 문제는 만들지 않았던 것 같다. 그래도 스스로 문제를 만들어보며 공부해보면 응용력도 생기도 더 좋다고 생각한다.

마지막으로 평행사변형을 출력하는 조금 어려운 문제를 도전해보았는데 이건 너무 어려워서 이해조차 하지 못했다.

다음이 다시 풀어야 할 것 같다.


 

 

별 찍기 학습을 마치고

 

오늘은 이렇게 사각형과 평행사변형을 출력하는 문제를 풀어보았다. 사각형 안에 X자가 있는 모양과 어떤 모양으로 할지 선택한 후 각기 다른 모양을 찍는 평행사변형 문제는 아직 풀지 못했다.

내일 이 부분에 대해서 더 공부하고 해결해보려고 한다. 한 가지 더 학습해보고 싶은 부분이 있는데 언리얼 공부를 해야 할 것 같아 고민이 된다.