별찍기 - 7

나무늘보·2023년 7월 25일
0

BaekJoon

목록 보기
2/2

별 찍기 - 7

문제
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

입력
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

출력
첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

예제 입력 1
5

처음엔 배열을 만들어서 직접 인덱스에 접근해서

#include <iostream>
#include <vector>
#include <string>
#include <sstream>

using namespace std;




void output(vector<char> a)
{
	for (auto c : a)
		cout << c;

	
}
int main()
{

	//첫째 줄에 1 <=  N  <= 100

	//첫째 줄부터 2XN - 1 번째 줄까지 별을 출력 
	// 5라면 9 줄을 출력 
	int n;
	cin >> n;
	//cout << n / 2 + 1;
	int a = (n * 2) - 1;
	vector <char> temp;
	for (int i = 0; i < a/2; i++)
	{
		temp.push_back(' ');
	}
	int remove = 0;
    


	for (int i = 0; i < a; i++)
	{
		if (i != 0) cout << endl;

		if (i <= a / 2)
		{
			temp[a / 2] = '*';
			temp[a / 2 - i] = '*';
			temp[a / 2 + i] = '*';
		}
		else
		{
			temp[a - 1 - remove] = ' ';
			temp[0 + remove] = ' ';
			remove++;
		}

		output(temp);
		
	}


}

이런식으로 풀었으나 뒷부분에 공백을 넣으면 안되는것같았다
계속 출력형식이 틀리다고 오류가 떳고

void output(vector<char> a)
{
	for (auto c : a)
		cout << c;

	
}
int main()
{

	//첫째 줄에 1 <=  N  <= 100

	//첫째 줄부터 2XN - 1 번째 줄까지 별을 출력 
	// 5라면 9 줄을 출력 
	int n;
	cin >> n;
	//cout << n / 2 + 1;
	int a = (n * 2) - 1;
	vector <char> temp;
	for (int i = 0; i < a/2; i++)
	{
		temp.push_back(' ');
	}
	int remove = 0;
	for (int i = 0; i < a; i++)
	{
		if (i != 0) cout << endl;
		if (i <= a / 2)
		{
			temp.push_back('*');
			temp[a/2 - i] = '*';
		}
		else
		{
			temp.pop_back();
			temp[0 + remove] = ' '; 
			remove++;
		}

		output(temp);
	}
}

최종적인형태는 vector의 push_back 과 pop_back으로 배열의 길이를 최소화하고
별의 앞부분은 직접 remove 변수를 통해 idx에 접근해서 공백으로 수정해주는 식으로 풀었다

profile
Unreal Programmer , C++

0개의 댓글