[C++] 2447๋ฒ: ๋ณ์ฐ๊ธฐ - 10
ํด๋น ๊ธ์ ๋ด์ฉ์ ์ต์ ์ ์๊ณ ๋ฆฌ์ฆ์ด ์๋ ๊ธ์ด์ด์ ์ฃผ๊ด์ ์ธ ํ์ด์ ๋๋ค. ๋ ์ข์ ํ์ด๊ฐ ์๋ค๋ฉด ๋๊ธ๋ก ํผ๋๋ฐฑ ๋ถํ๋๋ฆฝ๋๋ค(__)
๋งํฌ
https://www.acmicpc.net/problem/2447
๋ฌธ์ ์ค๋ช
์ฌ๊ท์ ์ธ ํจํด์ผ๋ก ๋ณ์ ์ฐ์ด ๋ณด์.
N์ด 3์ ๊ฑฐ๋ญ์ ๊ณฑ(3, 9, 27,...)์ด๋ผ๊ณ ํ ๋, ํฌ๊ธฐ N์ ํจํด์ N×N ์ ์ฌ๊ฐํ ๋ชจ์์ด๋ค.
ํฌ๊ธฐ 3์ ํจํด์ ๊ฐ์ด๋ฐ์ ๊ณต๋ฐฑ์ด ์๊ณ , ๊ฐ์ด๋ฐ๋ฅผ ์ ์ธํ ๋ชจ๋ ์นธ์ ๋ณ์ด ํ๋์ฉ ์๋ ํจํด์ด๋ค.
***
* *
***
N์ด 3๋ณด๋ค ํด ๊ฒฝ์ฐ, ํฌ๊ธฐ N์ ํจํด์ ๊ณต๋ฐฑ์ผ๋ก ์ฑ์์ง ๊ฐ์ด๋ฐ์ (N/3) ×(N/3) ์ ์ฌ๊ฐํ์ ํฌ๊ธฐ N/3์ ํจํด์ผ๋ก ๋๋ฌ์ผ ํํ์ด๋ค. ์๋ฅผ ๋ค์ด ํฌ๊ธฐ 27์ ํจํด์ ์์ ์ถ๋ ฅ 1๊ณผ ๊ฐ๋ค.
์ ํ ์กฐ๊ฑด
์ฒซ์งธ ์ค์ N์ด ์ฃผ์ด์ง๋ค. N์ 3์ ๊ฑฐ๋ญ์ ๊ณฑ์ด๋ค. ์ฆ ์ด๋ค ์ ์ k์ ๋ํด N=3k์ด๋ฉฐ, ์ด๋ 1 ≤ k < 8์ด๋ค.
์ ์ถ๋ ฅ ์
<์ ๋ ฅ 1>
27
<์ถ๋ ฅ 1>
***************************
* ** ** ** ** ** ** ** ** *
***************************
*** ****** ****** ***
* * * ** * * ** * * *
*** ****** ****** ***
***************************
* ** ** ** ** ** ** ** ** *
***************************
********* *********
* ** ** * * ** ** *
********* *********
*** *** *** ***
* * * * * * * *
*** *** *** ***
********* *********
* ** ** * * ** ** *
********* *********
***************************
* ** ** ** ** ** ** ** ** *
***************************
*** ****** ****** ***
* * * ** * * ** * * *
*** ****** ****** ***
***************************
* ** ** ** ** ** ** ** ** *
***************************
ํ์ด
#include <stdio.h>
#include <iostream>
const int MININUM_UNIT = 3;
int n;
char** result;
void InputStar(int num, int rowIndex, int colIndex)
{
if (num < n && rowIndex == 0 && colIndex == 0)
{
InputStar(num * 3, 0, 0);
}
int startIndex = num / MININUM_UNIT;
int endIndex = (num / MININUM_UNIT) * 2;
for (int i = startIndex + rowIndex; i < endIndex + rowIndex; i++)
{
for (int j = startIndex + colIndex; j < endIndex + colIndex; j++)
{
result[i][j] = ' ';
}
}
if (rowIndex + num > n - 1 && colIndex + num > n - 1)
{
return;
}
if (rowIndex + num > n - 1)
{
InputStar(num, 0, colIndex + num);
return;
}
InputStar(num, rowIndex + num, colIndex);
}
int main()
{
scanf("%d", &n);
result = new char*[n];
for (int i = 0; i < n; i++)
{
result[i] = new char[n+1];
for (int j = 0; j < n; j++)
{
result[i][j] = '*';
}
}
InputStar(MININUM_UNIT, 0, 0);
for (int i = 0; i < n; i++)
{
result[i][n] = '\0';
printf("%s\n", result[i]);
}
return 0;
}
ํ์ด ์ค๋ช
๋ฌธ์ ์์ ํฌ์ธํธ๋ ํจํด์ ๊ฐ์ด๋ฐ์ ๊ณต๋ฐฑ์ด ์๋ค๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด, ํฌ๊ธฐ๊ฐ 27์ธ ์ ์ฌ๊ฐํ์ ๊ฐ์ด๋ฐ์ 9x9 ๋น ์ ์ฌ๊ฐํ์ด ์๊ณ ํฌ๊ธฐ๊ฐ 9์ธ ์ ์ฌ๊ฐํ์ ๊ฐ์ด๋ฐ์ 3x3์ ๋น ์ ์ฌ๊ฐํ์ด ์๋ค.
์ ๋ ฅ๋ฐ์ N๋งํผ N x N ์ ์ฌ๊ฐํ ๋ฐฐ์ด์ ์์ฑํด์ฃผ๊ณ ์ฌ๊ทํจ์๋ก ๊ฐ์ด๋ฐ ๋ฒ์ ๋ถ๋ถ์ ์ง์์ฃผ๋ ์ ๋ต์ ์ฌ์ฉํ๋ค.
Step 1. N x N ์ ์ฌ๊ฐํ ๋ฐฐ์ด์ *๋ก ๋ชจ๋ ์ฑ์์ค๋ค.
Step 2. ํฌ๊ธฐ๊ฐ 3์ธ ์ ์ฌ๊ฐํ(์ต์ ๋จ์)๋ถํฐ ์ ์ฌ๊ฐํ์ ๊ฐ์ด๋ฐ๋ฅผ ๋น์์ค๋ค.
ํ๋์ row๋ฅผ ๋ค ์ํํ๋ค๋ฉด ๋ค์ row๋ก ๋์ด๊ฐ๋ค. ([1, 2, 3] -> [4, 5,...], ->...)
Step 3. ๊ฐ์ด, ๋ค์ ํฌ๊ธฐ ๋จ์์ธ 9์ธ ์ ์ฌ๊ฐํ์ ๊ฐ์ด๋ฐ๋ฅผ ๋น์์ค๋ค. ์ด ๊ณผ์ ์ ํฌ๊ธฐ ๋จ์๊ฐ N์ ๋๋ฌํ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
'Algorithm > ๋ฐฑ์ค ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++, Golang] 2798๋ฒ: ๋ธ๋์ญ (0) | 2020.07.14 |
---|---|
[C++, Golang, Java] 14888๋ฒ: ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ (0) | 2020.07.10 |
[C++, Golang] 11729๋ฒ: ํ๋ ธ์ด ํ ์ด๋ ์์ (0) | 2020.07.10 |
[C++, Golang] 2012๋ฒ: ๋ฑ์ ๋งค๊ธฐ๊ธฐ (0) | 2020.07.08 |
[Golang] 2447๋ฒ: ๋ณ์ฐ๊ธฐ - 10 (0) | 2020.07.07 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[C++, Golang, Java] 14888๋ฒ: ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ
[C++, Golang, Java] 14888๋ฒ: ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ
2020.07.10 -
[C++, Golang] 11729๋ฒ: ํ๋ ธ์ด ํ ์ด๋ ์์
[C++, Golang] 11729๋ฒ: ํ๋ ธ์ด ํ ์ด๋ ์์
2020.07.10 -
[C++, Golang] 2012๋ฒ: ๋ฑ์ ๋งค๊ธฐ๊ธฐ
[C++, Golang] 2012๋ฒ: ๋ฑ์ ๋งค๊ธฐ๊ธฐ
2020.07.08 -
[Golang] 2447๋ฒ: ๋ณ์ฐ๊ธฐ - 10
[Golang] 2447๋ฒ: ๋ณ์ฐ๊ธฐ - 10
2020.07.07