https://www.acmicpc.net/problem/2448
풀이
이것저것 해보다가 결국 끼워맞추기를 시작한 문제..
반복되는 문양을 vector 배열에 넣어준다. 이후에는 코드에서 알 수 있듯.. 끼워맞춰서 출력만 되도록하였다.
이해를 돕기위해 아래 이미지를 참조하자.
반복되기 이전 공백이 3개씩 들어가며, 그 공백의 갯수는 2^n개로 알 수가 있다.
입력값이 3 * 2^k 이기 때문에 유추할 수 있다.
앞에 공백 " "을 채워주고 별 그린 이후 이후 공백 " "을 채워준다.
아래 코드를 참조하자.
Code ( C++ )
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
vector<string> star;
int n;
void make_star(int shift, vector<string>& star)
{
int c = star.size();
for (int i = 0; i < c; i++) {
star.push_back(star[i] + star[i]);
string tmp;
for (int j = 0; j < shift; j++)
tmp += " ";
tmp += star[i];
for (int j = 0; j < shift; j++)
tmp += " ";
star[i] = tmp;
}
}
int main()
{
ios::sync_with_stdio(false);
cout.tie(NULL);
// 반복되는 별 넣기
star.push_back(" * ");
star.push_back(" * * ");
star.push_back("***** ");
cin >> n;
// N == 3 * 2^k , k값 구해서 반복시키기
int k = log(n / 3) / log(2);
// 값 vector에 넣기
for (int i = 0; i < k; i++)
{
make_star(int(pow(2, i)), star);
}
for (int i = 0; i < n; i++)
{
cout << star[i] << endl;
}
}
'💻 OnlineJudge > Baekjoon' 카테고리의 다른 글
[백준 / BOJ] C++ 1107 리모컨 (0) | 2022.12.15 |
---|---|
[백준 / BOJ] C++ 1003 피보나치 함수 (0) | 2022.12.11 |
[백준 / BOJ] C++ 2407 조합 (0) | 2022.12.07 |
[백준 / BOJ] C++ 2096 내려가기 (0) | 2022.11.28 |
[백준 / BOJ] C++ 1991 트리 순회 (0) | 2022.11.27 |