BOJ 2447 : 별찍기 10 - C++
별찍기 10
코드
#include <iostream>
#include <vector>
using namespace std;
char board[2200][2200];
void pattern(int y, int x, int size){
if(size == 0) return;
for(int i=y+size/3;i<y+size/3+size/3;i++)
{
for(int j=x+size/3;j<x+size/3+size/3;j++)
{
board[i][j] = ' ';
}
}
int one = size/3;
int two = size/3 + size/3;
/* 가운데 부분을 제외한 8부분에 대해 재귀 실행 */
pattern(y, x, size/3);
pattern(y+one, x, size/3);
pattern(y+two, x, size/3);
pattern(y, x+one, size/3);
pattern(y, x+two, size/3);
pattern(y+one, x+two, size/3);
pattern(y+two, x+one, size/3);
pattern(y+two, x+two, size/3);
return;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
for(int i=0;i<N;i++)
fill(board[i], board[i]+N, '*');
pattern(0, 0, N);
for(int i=0;i<N;i++)
cout << board[i]<<'\n';
return 0;
}
- 원리
1) 일정 구역에서 항상 중간에 해당되는 부분은 ' '값을 가지도록 저장
(y와 x의 범위가
y+size/3 ~ y+size/3+size/3
x+size/3 ~ x+size/3+size/3
일 때 항상 ' '값을 가짐)
2) 가운데 부분을 제외하고 나머지 8부분
에 대해 재귀 수행
- 다른 풀이는 ?
: ' ' 값을 가지는 좌표들의 특징을 찾아서 해결함
(y/size%3 == 1 && x/size%3 == 1
일 때 공백임!)
Author And Source
이 문제에 관하여(BOJ 2447 : 별찍기 10 - C++), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@neity16/BOJ-2447-별찍기-10-C
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#include <iostream> #include <vector> using namespace std; char board[2200][2200]; void pattern(int y, int x, int size){ if(size == 0) return; for(int i=y+size/3;i<y+size/3+size/3;i++) { for(int j=x+size/3;j<x+size/3+size/3;j++) { board[i][j] = ' '; } } int one = size/3; int two = size/3 + size/3; /* 가운데 부분을 제외한 8부분에 대해 재귀 실행 */ pattern(y, x, size/3); pattern(y+one, x, size/3); pattern(y+two, x, size/3); pattern(y, x+one, size/3); pattern(y, x+two, size/3); pattern(y+one, x+two, size/3); pattern(y+two, x+one, size/3); pattern(y+two, x+two, size/3); return; } int main() { ios::sync_with_stdio(0); cin.tie(0); int N; cin >> N; for(int i=0;i<N;i++) fill(board[i], board[i]+N, '*'); pattern(0, 0, N); for(int i=0;i<N;i++) cout << board[i]<<'\n'; return 0; }
- 원리
1) 일정 구역에서 항상 중간에 해당되는 부분은 ' '값을 가지도록 저장
(y와 x의 범위가
y+size/3 ~ y+size/3+size/3
x+size/3 ~ x+size/3+size/3
일 때 항상 ' '값을 가짐)
2) 가운데 부분을 제외하고나머지 8부분
에 대해 재귀 수행
- 다른 풀이는 ?
: ' ' 값을 가지는 좌표들의 특징을 찾아서 해결함
(y/size%3 == 1 && x/size%3 == 1
일 때 공백임!)
Author And Source
이 문제에 관하여(BOJ 2447 : 별찍기 10 - C++), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@neity16/BOJ-2447-별찍기-10-C저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)