본문 바로가기
Algorithm 💫/Problem Solving

[백준 2442번 별찍기 - 5/ C++]

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

www.acmicpc.net/problem/2442

 

2442번: 별 찍기 - 5

첫째 줄에는 별 1개, 둘째 줄에는 별 3개, ..., N번째 줄에는 별 2×N-1개를 찍는 문제 별은 가운데를 기준으로 대칭이어야 한다.

www.acmicpc.net

 

2442번 별찍기는...굉장히 쉬울거라고 처음에 생각했다..ㅎㅅㅎ 💫 

하지만 어떤 이유에서인지 계속 오류가 나는 것..이다! 왜일까 생각을 했다...

제일 큰 N의 범위가 100이니 이로 테스트해도 정상적으로 별이 출력됐는데 백준에 올리면 런타임 에러가 떴다..

런타임 에러는 대부분 인덱스를 잘못 접근 했을 때 나는 오류인데..ㅠ3ㅠ 

 

결국 알게됐는데 vector의 범위가 처음에 101로 했어서 그렇다 . N번째 줄에는 최대 2*N-1개의 별이  찍히게 되는데 이를 고려하지 못하여 그렇게 됐달까^_^

 

또 ...질문게시판을 보니 출력오류로 사람들이 혼란을 겪고 있는 것을 알 수 있었다.. 출력 방식을 확인할 때 공백어디까지 출력해야하는지 확인하려면 아래와 같이  "드래그"  해보면 된다! 

 

 

드래그로 출력형식 확인하기!

그러면 한줄을 2*N-1 만큼 출력하지 않는 다는 것을 알 수 있다. ㅎㅅㅎ 

 

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

using namespace std;

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

    int starLen = (2 * N - 1);
    int mid = (2 * N - 1) / 2;
    int left = mid, right = mid;

    stars[mid] = "*";
    while (N--) {

        for (int i = 0; i <= right; i++)
            cout << stars[i];
        cout << "\n";
        left--;
        right++;
        if (left < 0 || right >= starLen)
            return 0;
        stars[left] = "*";
        stars[right] = "*";
    }

    return 0;
}

 

반응형

댓글