이거 뭐냐
문제 들어가기 전에 골드에서 멈칫
문제 읽고 이해하는데 한참 걸리고
예제 출력 이해하느라 한참..
어찌저찌 문제 이해하니까 이제 어떻게 풀지 싶었으나
아래처럼 슥슥 적어보면서 코드 고민하다보니 풀렸다!
3의 0승
0, 0.
3의 1승
0, 0 ~ 2, 2까지 근데 1, 1 제외
3의 2승
0, 0 ~ 8, 8까지 근데 3, 3 ~ 5, 5 제외
3의 3승
0, 0 ~ n-1, n-1까지 근데 n/3, n/3 ~ n*2/3-1, n*2/3-1 제외
포인트는
배열을 채울 때, 나머지를 활용해 이미 채워진 배열을 재사용하는 것
그리고, 나머지를 구할 때 채울 좌표를 이전 레벨값으로 나누는 것이다.
근데 프로그래머스에서 이런 거 나오면 절대 못 풀 것 같음;
디버깅 최고
#include <iostream>
#include <vector>
using namespace std;
int n;
void solution(vector<vector<bool>>& v, vector<vector<bool>>& used, int lev) {
if (lev > n) return;
for (int i = 0; i < lev; i++) {
for (int j = 0; j < lev; j++) {
if (used[i][j]) continue;
if (i >= lev / 3 && i < lev * 2 / 3 && j >= lev / 3 && j < lev * 2 / 3) {
v[i][j] = false;
used[i][j] = true;
}
else {
v[i][j] = v[i % (lev / 3)][j % (lev / 3)];
used[i][j] = true;
}
}
}
solution(v, used, lev * 3);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n;
vector<vector<bool>> v(n, vector<bool>(n, true));
vector<vector<bool>> used(n, vector<bool>(n, false));
solution(v, used, 3);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (v[i][j]) cout << "*";
else cout << " ";
}
cout << "\n";
}
return 0;
}
골드를 풀다니 ~~
와! 골드! 재밌다! 즐겁다! 또 풀고싶다?!