피너클의 it공부방
백준 2447 별 찍기 - 10 (c++) : 피너클 본문
728x90
반응형
https://www.acmicpc.net/problem/2447
구현문제다.
int n;
char stars[10001][10001];
char first[3][3] = {{'*', '*', '*'},
{'*', ' ', '*'},
{'*', '*', '*'}};
전체 별을 담을 stars와 초기 별의 모음인 first를 준비해준다.
memset(stars, ' ', sizeof(stars));
for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
stars[i][j] = first[i][j];
cin >> n;
solve(3, 3, 3);
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++) cout << stars[i][j];
cout << '\n';
}
그후 메인함수에소
stars를 ' '로 초기화하고 0~3에 first를 집어넣은뒤 n을 입력받고 solve를 돌린다.
그후 n범위안의 stars를 출력하면된다.
n=3 일때 별의 모양이다. n=9가 입력된다면
위를 출력해야한다. n=3이 여러개가 붙은걸 확인할수있다.
이전에 만들어진 별들을 위와 같이 이어붙일것이다.
좌측 상단의 별 모음의 좌표가 0~y, 0~x라고 한다면 그 옆쪽에 있는 별 모음의 좌표는 0~y, x~2x이다.
이것을 총 7개 붙이면 된다.
void solve(int y, int x, int num) {
if (num == n) return;
for (int i = 0; i < y; i++) {
for (int j = 0; j < x; j++) {
stars[i][x + j] = stars[i][j];
}
}
for (int i = 0; i < y; i++) {
for (int j = 0; j < x; j++) {
stars[i][2 * x + j] = stars[i][j];
}
}
for (int i = 0; i < y; i++) {
for (int j = 0; j < x; j++) {
stars[y + i][j] = stars[i][j];
}
}
for (int i = 0; i < y; i++) {
for (int j = 0; j < x; j++) {
stars[y + i][2 * x + j] = stars[i][j];
}
}
for (int i = 0; i < y; i++) {
for (int j = 0; j < x; j++) {
stars[2 * y + i][j] = stars[i][j];
}
}
for (int i = 0; i < y; i++) {
for (int j = 0; j < x; j++) {
stars[2 * y + i][x + j] = stars[i][j];
}
}
for (int i = 0; i < y; i++) {
for (int j = 0; j < x; j++) {
stars[2 * y + i][2 * x + j] = stars[i][j];
}
}
solve(3 * num, 3 * num, num * 3);
}
solve함수다. num이 n과 같아지면 함수를 종료한다.
그후에는 이전에 만들어진 별 모음을 전부 붙이고 다음 solve함수를 실행하면 된다.
#include <iostream>
#include <cstring>
using namespace std;
int n;
char stars[10001][10001];
char first[3][3] = { { '*', '*', '*' },
{ '*', ' ', '*' },
{ '*', '*', '*' } };
void solve(int y, int x, int num) {
if (num == n) return;
for (int i = 0; i < y; i++) {
for (int j = 0; j < x; j++) {
stars[i][x + j] = stars[i][j];
}
}
for (int i = 0; i < y; i++) {
for (int j = 0; j < x; j++) {
stars[i][2 * x + j] = stars[i][j];
}
}
for (int i = 0; i < y; i++) {
for (int j = 0; j < x; j++) {
stars[y + i][j] = stars[i][j];
}
}
for (int i = 0; i < y; i++) {
for (int j = 0; j < x; j++) {
stars[y + i][2 * x + j] = stars[i][j];
}
}
for (int i = 0; i < y; i++) {
for (int j = 0; j < x; j++) {
stars[2 * y + i][j] = stars[i][j];
}
}
for (int i = 0; i < y; i++) {
for (int j = 0; j < x; j++) {
stars[2 * y + i][x + j] = stars[i][j];
}
}
for (int i = 0; i < y; i++) {
for (int j = 0; j < x; j++) {
stars[2 * y + i][2 * x + j] = stars[i][j];
}
}
solve(3 * num, 3 * num, num * 3);
}
int main() {
memset(stars, ' ', sizeof(stars));
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
stars[i][j] = first[i][j];
cin >> n;
solve(3, 3, 3);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) cout << stars[i][j];
cout << '\n';
}
}
전체코드다.
728x90
반응형
'백준' 카테고리의 다른 글
백준 1075 나누기 (c++) : 피너클 (0) | 2022.08.20 |
---|---|
백준 1027 고층 건물 (c++) : 피너클 (0) | 2022.08.19 |
백준 25305 커트라인 (c++) : 피너클 (0) | 2022.08.18 |
백준 1004 어린 왕자 (c++) : 피너클 (0) | 2022.08.18 |
백준 1002 터렛 (c++) : 피너클 (0) | 2022.08.17 |
Comments