PS 연습

[PS 연습 - 재귀] 백준 문제 풀이 - 10994 별찍기 - 19

생선묵김치찌개 2022. 4. 29. 23:27

 

어느정도 규칙은 찾았지만 함수를 2개 선언해야하는것, 전역변수에 2차원 배열을 선언하는것을
생각해 내지 못했다

👩🏻‍💻 문제링크

https://www.acmicpc.net/problem/10994

 

10994번: 별 찍기 - 19

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

www.acmicpc.net

 

✍️ 아이디어

1. 문제 이해

  • 우선 안에 있는 별 모음을 둘러싸는 별 모음을 만들어야한다

2. 이전 별 모음의 바깥쪽을 둘러쌓는 새로운 별모음을 만드는것이 재귀적이다

3. 다음번 별 모음을 생성할려면 인덱스가 +2, +2 씩 더해진다

✍️소스코드

  • 다른 사람의 코드를 어느정도 보고 내 방식대로 구현해 본것
#include <iostream>
using namespace std;
char arr[400][400];

void Draw_star(int num, int row, int col)
{
	int x_x = (num-1)*4+1;
	if(num<=0) return;
	else
	{
		for(int i=0; i<x_x; i++)
		{
			for(int j=0; j<x_x; j++)
			{
				if(i==0 || i==x_x-1)
				{
					arr[i+row][j+col]='*';
				}
			
				else
				{
					if(j==0 || j==x_x-1)
						arr[i+row][j+col]='*';
					else
						arr[i+row][j+col]=' ';
				}
			}
		}
	}
}


void Start(int n, int row, int col)
{
    
    Draw_star(n, row, col);  
    
    if (n == 1)
    {
        return; 
    }
        
    Start(n - 1, row + 2, col + 2); //이것이 핵심

}

int main()
{
	int N; cin>>N;
	Start(N,0,0);
	
	for(int i=0; i<(N-1)*4+1; i++)
	{
		for(int j=0; j<(N-1)*4+1; j++)
			cout<<arr[i][j];
		cout<<endl;
	}
}

 Start(n - 1, row + 2, col + 2); 이것이 핵심....2차원 배열을 사용해야한다는것을 알았다면 떠올릴수 있지 않았을까..? ㅜ

 

 

참고한 다른사람의 코드

 

https://ansohxxn.github.io/boj/10994/

 

[백준 10994][🤍4] 별 찍기(19) (재귀, DFS)

별 찍기 19

ansohxxn.github.io

체감난이도 걸린시간 참고 사용 문법
중상 1h  다른사람 코드 봄 재귀, for문으로 구현

 

놓친 부분

-> 내가 생각한 컴퓨터가 알아서 슈슉 돌리고 결과를 짠하고 보여주는것은 불가능함 저장할 공간이 필요함!!! (여기선 2차원 배열)