※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 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

+ Recent posts