목차
https://www.acmicpc.net/problem/2447
코드
#include <iostream>
using namespace std;
char pattern[2187][2187];
void init(int n)
{
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
pattern[i][j] = ' ';
}
}
}
void show(int n)
{
for(int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
printf("%c", pattern[i][j]);
}
printf("\n");
}
}
void solve(int n, int i, int j)
{
if(n == 3)
{
for(int x = i; x < i + 3; x++)
{
for(int y = j; y <j + 3; y++)
{
if(x == i + 1 && y == j + 1) continue;
else pattern[y][x] = '*';
}
}
}
else
{
for(int x = i; x < i + n; x += (n / 3))
{
for(int y = j; y <j + n; y += (n / 3))
{
if(x == i + (n / 3) && y == j + (n / 3)) continue;
else solve(n / 3, x, y);
}
}
}
}
int main() {
int n;
cin >> n;
init(n);
solve(n, 0, 0);
show(n);
return 0;
}
설명
풀다보면 그냥 오른쪽으로 짜서 걍 3의 8승까지의 경우의 수를 다 배치해서 준비해놓고
출력시키는게 더 낫지 않나 싶다. 사실 그게 더 효율적이긴 할 거 같은데...
굳이 재귀함수로 계산해서 출력하는거보다야 경우의수도 얼마 안되는데 그거 별 찍는데 얼마 걸린다고
https://wonsang98.tistory.com/28?category=816114
옛날에 풀었던 문제인데, 설명을 작년의 내가 훨씬 더 잘해놨기 때문에 이걸 보는게 좋을거같다.
진짜 작년의 나는 어떻게 이렇게 열심히 설명을 적어놨지?
하루에 한 문제만 풀고 설명을 올려서 그런가보다... 지금은 재활치료중이라 하루에 되는대로 일단 풀어놓고 코드만 올리는 식이라 이렇게 상세하게 설명을 올릴 시간적 여유가 부족하다.
작년민수야! 고맙다!
'공부 > 백준(C++) - 2022~' 카테고리의 다른 글
백준 2798번: 블랙잭 [C++] (0) | 2022.01.25 |
---|---|
백준 1002번: 터렛 [C++] (0) | 2022.01.23 |
백준 10870번: 피보나치 수 5 [C++] (0) | 2022.01.23 |
백준 10872번: 팩토리얼 [C++] (0) | 2022.01.23 |
백준 1002번: 터렛 [C++] (0) | 2022.01.22 |