BOJ : https://www.acmicpc.net/problem/2447
GitHub : https://github.com/junho0956/Algorithm/blob/master/2447/2447/%EC%86%8C%EC%8A%A4.cpp
별찍기 튜토리얼중에 가장 어려웠던 것 같다.
그만큼 별찍기 문제중 유명한 문제이기도 하다.
힌트는 3의 제곱수라는 것과, 공백 좌표를 유심히 봐야하는 것이다.
옆의 사진에서 보면 n = 9 기준에서 공백이 되는 좌표는
(1,1) (1,4) (1,7) (4,1) ...
그리고 정중앙에 텅비게되는 (3,3) (3,4) (3,5) ...
이 숫자들을 싹다 3으로 나누어본다.
3으로 나누어보면서 알게되는 규칙은
현재 좌표 dx, dy 를 3으로 나눈 나머지가 둘다 1인 경우
그 지점은 공백이 되는 지점이라는 것이다.
어느 한 좌표라도 나머지가 1이 아니라면 그곳은 * 이 되는 지점이다.
이를 이용하여 코드를 구현하였다.
더보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(false);
int N; cin >> N;
for (int i = 0; i < N; i++) {
for (int k = 0; k < N; k++) {
int dx = i, dy = k;
while (1) {
if (dx == 0 || dy == 0) break;
if (dx % 3 == 1 && dy % 3 == 1) break;
dy /= 3, dx /= 3;
}
if (dx && dy) cout << " ";
else cout << "*";
}
cout << "\n";
}
return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
'algorithm > BOJ' 카테고리의 다른 글
BOJ 9465 스티커 (0) | 2020.01.06 |
---|---|
BOJ 11057번 오르막 수 (0) | 2020.01.06 |
BOJ 10844번 쉬운 계단 수 (0) | 2020.01.06 |
BOJ 3943번 헤일스톤 수열 (0) | 2019.11.25 |
4673번 : 셀프넘버 - junnnho (0) | 2019.09.26 |