※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 2448번 문제인 별 찍기 - 11이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/2448
2448번: 별 찍기 - 11
첫째 줄에 N이 주어진다. N은 항상 3×2k 수이다. (3, 6, 12, 24, 48, ...) (0 ≤ k ≤ 10, k는 정수)
www.acmicpc.net
먼저 3줄짜리 삼각형을 그려주자.
그 다음, 규칙을 따라 다음 삼각형을 그리면 줄 수가 기존 삼각형의 2배가 되고, 새로운 줄들은 기존 모양을 가로로 2번 반복한 모양이 됨을 확인하자. 이 때, 두 삼각형 사이에 공백이 하나 들어있음에 유의하자.
따라서, 다음 단계의 삼각형을 그릴 때마다 기존 삼각형을 가로로 두개 이어붙이고, 기존 삼각형의 좌우로 여백을 넣어주는 것으로 문제를 해결할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using namespace std;
string ans[3072];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int x; cin >> x;
int N = 3;
ans[0] = " * ";
ans[1] = " * * ";
ans[2] = "*****";
while (N < x) {
string temp = "";
for (int i = 0; i < N; i++) temp += " ";
for (int i = 0; i < N; i++) {
ans[i + N] = ans[i] + " " + ans[i];
ans[i] = temp + ans[i] + temp;
}
N <<= 1;
}
for (int i = 0; i < N; i++) cout << ans[i] << '\n';
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 17829 // C++] 222-풀링 (0) | 2021.11.26 |
---|---|
[BOJ 4386 // C++] 별자리 만들기 (0) | 2021.11.25 |
[BOJ 5639 // C++] 이진 검색 트리 (0) | 2021.11.23 |
[BOJ 15353 // C++] 큰 수 A+B (2) (0) | 2021.11.22 |
[BOJ 10986 // C++] 나머지 합 (0) | 2021.11.21 |