개요

군다 같은 놈

프로그래밍 뉴비 학살기 (구구단 & 별찍기)

아래 내용은 개인적인 생각으로 공식적인 공략 내용과는 차이가 있을 수 있습니다.

 

구구단

3 * 3 사이즈의 구구단을 만들어라

< Step 1 >

콘솔은 한 번 내려오면 올라갈 수 없기 때문에 한 번에 3개씩 묶어서 그려줘야 한다.

3개씩 묶은 (2단, 3단, 4단) (5단, 6단, 7단) (8단, 9단)  반복문(for)을 사용하여 한 번에 그려줄 수 있도록 코딩하자.

 

이쁘게 안 그려진다면??

꿀팁! : \t (tab) 와 printf("%d * %d = %2d", 변수, 변수, 변수*변수)를 사용하여 깔끔하게 만들 수 있다.

 

< Step 2 >

줄바꿈(\n)을 하면서 3개씩 묶은 애들을 곱하는 값(j)으로 반복해서 그려주자.

(ex.)

2*1   3*1   4*1

2*2   3*2   4*2

2*3   3*3   4*3

...

 

< Step 3 >

나머지 묶음도 반복문을 사용하여 마저 그려주면 완성!!

for (int i = 2; i < 10; i += 3) // i : 곱하는 단
{
    for (int j = 0; j < 10; j++) // j : 곱하는 값
    {
        for (int k = 0; k < 3; k++) // k : 한 줄에 3개씩 그려야 하니까 3번 반복할게요!
        {
            if (j == 0 && (i + k) < 10) // 0줄이면 단을 써줄거야!! 근데 10단은 없어~!
            {
                cout << "[ " << i + k << " 단 ]\t";
            }
            else // 0줄이 아닐때만 들어와라
            {
                if (i + k < 10) // 10단은 없다니까
                {
                    printf("%d * %d = %2d\t", i + k, j, (i + k) * j);

                    // cout << i + k << " * " << j << " = " << ((i+k) * j) << "\t";
                    // 이렇게 출력해도 됩니다.
                }
            }
        }
        cout << endl; // 다음 줄로 내려주자
    }
    cout << endl; // 3개씩 묶은 단을 다 그렸으면 다음 줄로 내려주자
}

 

별찍기

별찍기라 쓰고 뉴비 절단기라 부른다.

 

1 페이즈

별찍기의 핵심은 보이지 않는 공간이라고 생각한다.

빈 공간도 공간이라고 계산을 해줘야 한다.

 

빈 공간과 별을 구분하여, 빈 공간을 찍고 을 찍는 방법으로 별찍기는 가능하다.

(물론 별을 찍는 방법은 다양하다)

 

이제 반복문을 사용하여 빈 공간과 별을 찍어내 보자

	for (int i = 0; i < 5; i++)
	{
		//빈칸
		for (int j = 0; j < 4 - i; j++)
		{
			cout << " ";
		}

		//별
		for (int j = 0; j <= i; j++)
		{
			cout << "*";
		}

		cout << endl;
	}

빈 공간과 별의 개념이 이해되었다면 2페이즈에 들아가자

 

2 페이즈

증가 또는 감소하는 규칙의 별찍기만 보다가 만난 별찍기 2페이즈.

 

하지만 우리는 이 녀석의 구성을 알고 있다.

( 빈 공간 - 별 - 빈 공간 ) 패턴이구나!

 

반복문을 3개를 쓰면 이 녀석을 그릴 수 있을 줄 알았는데,

증가했다가 감소하는 별에 당황하지 않을 수 없다.

 

그래서 규칙을 생각해 보았는데...

대칭된 모양과 일정한 수로 증감하는 것을 알 수 있었다.

일정하게 감소하는 값이 감소하다가 증가하기 위해서절대값이 되면 가능하다고 생각했다.

abs(4 - i) // 4부터 i만큼 감소하는 값의 절대값을 구하자

 

빈 공간절대값의 수로, 9칸 - 빈공간의 수로 계산하여 별을 찍어보았다.

공략 완료!

for (int i = 0; i < 9; i++)
{
    //빈칸
    for (int j = 0; j < abs(4 - i); j++) // abs(값) : 절대 값
    {
        cout << " ";
    }

    //별
    for (int j = 0; j < 9 - (2 * abs(4 - i)); j++)
    {
        cout << "*";
    }

    //빈칸
    for (int j = 0; j < abs(4 - i); j++)
    {
        cout << " ";
    }

    cout << endl;
}

 

728x90

'Program > C (C++,C#)' 카테고리의 다른 글

[C++] 콘솔용 탈출게임  (0) 2022.04.13
[C++] 배열  (0) 2022.04.13
[C++] 제어문  (0) 2022.04.12
[C++] 난수  (0) 2022.04.11
[C++] 연산자  (0) 2022.04.07

+ Recent posts