별 찍기 - 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에 접근해서 공백으로 수정해주는 식으로 풀었다