본문 바로가기
Algorithm 💫/Problem Solving

[백준 2522번 별찍기 - 12/ C++]

by 돼지고기맛있다 2021. 1. 4.
반응형

www.acmicpc.net/problem/2522

 

2522번: 별 찍기 - 12

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

www.acmicpc.net

별찍ㄱ....12🙈

 

이번 별찍기는 왼쪽을 바라보는 화살표 모양을 출력해주는 것이다! "◀️"

 

처음 생각했던 방식은 인덱스가 맨 끝에서부터 시작해서 (N-1) 포인트가되는 지점 (인덱스가 0되는 지점이자 i가 mid 보다 커지는 지점)을 찍고 다시 줄어든다는 점이었다..!

그럼 맨 끝 인덱스부터 별을 앞으로 하나씩 채워나가다가 포인드가 mid보다 커지는 지점에서는 다시 찍었던 별들을 없애주고 출력해주는 방식을 택했다. ㅎㅅㅎ

 

printStar에 현재 그려나가는 별을 포인팅하는 index값을 넣어주었고 i가 mid 보다 큰지 작은지를 알아가며 값을 증감 시켜주었다!

 

중요한 것은 i와 mid 가 같은 지점에는 그 어떤 것도 하지 않아야한다. 그 지점에서 증감을 시켜주면 마지막에 찍은 포인트 부분을 다시 지워줘야하는데 그렇지 모하기 때묺ㅎㅎ....

 

 

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

using namespace std;

vector<string> stars(101, " ");
int main()
{
    int N;
    cin >> N;

    int mid = (2 * N - 1) / 2;
    int printStar = N - 1;

    stars[printStar] = "*";

    for (int i = 0; i < 2 * N - 1; i++) {
        
        for (int j = 0; j < N; j++)
            cout << stars[j];
        cout << "\n";
        
        if (i < mid)
            printStar--;
        else if (i > mid)
            printStar++;

        if (stars[printStar] == " ")
            stars[printStar] = "*";
        else
            stars[printStar] = " ";
    }
    return 0;
}
반응형

댓글