나 개발자 진짜 되냐?

바킹독 0x02 문제21 - 별찍기 4 / 백준 2441번 본문

C++을 시작해봐요!/알고리즘을 공부해봐요!

바킹독 0x02 문제21 - 별찍기 4 / 백준 2441번

Snow Rabbit 2025. 8. 20. 19:38

 

덥다.

오늘 엄청덥다.

 

 

별을 좋아하던 내가

이제 별찍기가 어려워서 조금 화가난다.

아니 이것도 어려우면 어떡할거야 진짜!!


 

오른쪽 기준으로 정렬 한 별..

 

 

흠..

3번이랑 비슷한데?!?!

 

나 근데 이번에 하면서 약간의 패턴을 익혔다.

 

그것은 바로. 반대로 생각하기 이다.

지금 별이 오른쪽에 정렬되어서

별을 어떻게 저렇게 띄워서 쓰지 라고 생각할 수 있지만

반대로 생각하면

지금 빈칸이 0,1,2,3,4 씩 생기고 있다고 생각해도 된다.

 

그렇게 문제를 접근해야한다. 

 

라고 말은 이렇게 썼지만 말과 행동이 다른 나의 모습..

for문을 두개 써야한다.

이중포문 말고!

 

2번의 경우엔

굳이 띄어쓰기를 안해도 엔터로 넘어갔지만

이번에는 띄어쓰기 즉 공백도 포함되어있기 때문에

for문을 두개 써서

한줄에 공백 2개, 별 3개 이렇게 써줘야한다. 

 

 

나는 이렇게 풀었다.

 

 

답지에서는 그냥 j를 0으로 초기화 시키고

계속 이어서 쓰기 때문에 첫번째 for문 에서는 굳이 쓰지 않았던 것이고

 

두번째에서는 첫번째 for문에 의해 j = i 가 가 되어서 넘어온 것이기 때문에

j = i인 상태에서 N까지니까 N  - i개가 출력되는 것이다. 

 

와 어렵다. j의 값을 이어받아 쓰는 형식이라고 한다.

 

지피티 에게 물어보며

진짜 왕 쉬운 친구 STL을 가져왔다. 그의 이름 string()

 

String()

1. + 연산 가능

" abc " + " def " = " abcdef "

 

2.  .size()로 길이 구할 수 有

 

3.[]로 인덱스 접근 가능

 

 

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    int N;
    cin >> N;

    for (int i = 0; i < N; i++) {
        cout << string(i, ' ')       // 공백 i개
             << string(N - i, '*')   // 별 (N-i)개
             << "\n";
    }
}

 

지피티가 짜준 코드

이렇게 하면 생각해보니 굳이 이중포문 안해도 되어서 좋은거같긴하다. 그리고 뭔가 왕쉬워보임

아까 내가 말했던 그 코드 규칙?도 뭔가 한눈에 보여서 좋다일까..

 

string( i ,' ' ) i의 갯수만큼 공백 문자열

string( N-i , ' * ' ) N - i 만큼 * 문자열

 

 

 

무엇보다 3번을 풀면서 알게되었다.

위에 for문 의 i 그리고 N 을 활용해서 써야 한다는것을..........