[C++] 백준 2444. 별 찍기 - 7

멋진감자·2024년 12월 19일
1

알고리즘

목록 보기
52/64
post-thumbnail

문제

입출력

예제

이거 뭐냐

풀이

문제 들어가기 전에 골드에서 멈칫
문제 읽고 이해하는데 한참 걸리고
예제 출력 이해하느라 한참..

어찌저찌 문제 이해하니까 이제 어떻게 풀지 싶었으나
아래처럼 슥슥 적어보면서 코드 고민하다보니 풀렸다!

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;
}

채점

골드를 풀다니 ~~

profile
난멋져

2개의 댓글

comment-user-thumbnail
2024년 12월 19일

와! 골드! 재밌다! 즐겁다! 또 풀고싶다?!

1개의 답글