카테고리 없음

백준 : 별 찍기 - 10, 별찍기 -11

studying develop 2020. 3. 2. 12:33

별찍기 10

 

음 모르겠다.... 그 이전 것들은 쉬웠는데 

 

<https://j3sung.tistory.com/65>

이것을 참고 했따.

 

프랙탈 처럼 뭔가 같은 모양이 반복된다는 건 알겠었는데

 

한줄씩 출력해야 될것이라 생각 했다.

 

전체를 배열로 놓고 채울 생각을 못했따. 전에 그냥 줄게 관계 없이 하면 좋겠다는 생각 정도는 했었는데

 

분할정복이라니....

 

스스로 구현해볼라했는데

 

분할 정복의 코드를 모르는거 같다.;;

 

#define _CRT_SECURE_NO_WARNINGS
#define debug 0
#include <iostream>
#include <algorithm>
#include <vector>
#include<string.h>
#include<set>
#include<queue>
#include<math.h>

using namespace std;

#define NUM 3001
#define MAXV 10000001
long long int N, M, S;

char arr[NUM][NUM];

void CQ(int size,int r,int c) {
	
	if (size == 1) {
		arr[r][c] = '*';
		return;
	}

	int n = size / 3;

	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 3; j++) {
			if (i == 1 && j == 1) {
				continue;
			}
			else {
				CQ(n,r+ n*i,c+ n*j);
			}
		}
	}

}


int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	freopen("input.txt", "r", stdin);

	cin >> N;
	
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			arr[i][j] = ' ';
		}
	}

	CQ(N, 0, 0);

	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			cout << arr[i][j];
		}
		cout << "\n";
	}

	return 0;
}

 

 

별찍기11

#define _CRT_SECURE_NO_WARNINGS
#define debug 0
#include <iostream>
#include <algorithm>
#include <vector>
#include<string.h>
#include<set>
#include<queue>
#include<math.h>

using namespace std;

#define NUM 4000
#define MAXV 10000001
long long int N, M, S;

char arr[NUM][NUM];

void CQ(int size,int r,int c) {
	if (size == 3) {
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 5; j++) {
				if (i == 0 && j == 2) {
					arr[r + i][c + j] = '*';
				}
				else if (i == 1 && (j == 1 || j == 3)) {
					arr[r + i][c + j] = '*';
				}
				else if (i == 2) {
					arr[r + i][c + j] = '*';
				}
			}
		}
		return;
	}

	int n = size / 2;

	
	CQ(n, r, c+size/2);	
	CQ(n, r + size / 2, c);
	CQ(n, r + size / 2, c + size);
	
	
}


int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	//freopen("input.txt", "r", stdin);

	cin >> N;


	for (int i = 0; i < NUM; i++) {
		for (int j = 0; j < NUM; j++) {
			arr[i][j] = ' ';
		}
	}

	CQ(N, 0, 0);

	for (int i = 0; i < N; i++) {
		for (int j = 0; j < 2*N; j++) {
			cout << arr[i][j];
		}
		cout << "\n";
	}

	return 0;
}

 

틀렸다;;

왜 틀리는지 모르겠다;

 

고쳤다. 배열의 열 크기를 두배로 해주니 맞았다;;;

 

**

이 문제들을 풀어보면서 내가 문제에 대한 기본적인 접근이 많이 부족하다는 것을 다시 느꼈다.....분할 정복을 이용할 생각하지 못하고 배열을 이용할 생각 하지 못했다는게 충격적인데 어떻게 할지 여전히 잘 모르겠다.......