| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- unity게임만들기
- unity게임
- c++ 백준
- 백준 c++ 공부
- 티스토리챌린지
- 바킹독알고리즘
- 백준 구현문제
- c#기본문법
- unity3d게임만들기
- 리그오브레전드턴제게임
- 백준코테
- 유니티
- 백준
- 유니티게임만들기
- 백준코딩테스트
- c#코딩기초트레이닝
- C++
- c#기초문법
- c#코테
- c++ solved.ac
- Unity
- 유니티공부
- solved class 2
- 바킹독
- 유니티서바이벌게임만들기
- c#
- 백준 C++
- C#문법
- unity3dservival
- 오블완
- Today
- Total
나 개발자 진짜 되냐?
바킹독 0x02 문제24 - 별찍기 7 / 백준 2444번 본문

string을 배운 후
조금 문제의 활력이 생기는 듯한 기분
기분만 그렇다.
라고 문제를 읽는데
갑자기 취소하고 싶어 졌다.
string활용을 어떻게 해야 할지 막막해졌기 때문이다.

시작부터 대뜸 예제 보라는 사가지없는 녀석..
그래도 출력에서 2N -1까지라고 설명해 줘서 쫌?! 고마웠다.

호오.. 다이아몬드군...
원래 5를 쓰면 5줄만 나왔는데 이번엔 5를 쓰고 9줄이 나왔다.
그래서 2N-1줄이라고 한 것 같았다.
내 고민은 이것이다.
1 - 4만 규칙을 정해놓고
마지막 5번째는 그냥 2n-1개 별 출력하고
다시 4-1까지 규칙을 정하는 방법
또는
그냥 1부터 2N-1 개수만큼 돌리는 것..
도대체 for문이 몇 개인거지.....
풀다 보니 전자로 풀었다.
디버깅 없었으면 또 헤맸을....ㅋ

쓰긴 했다마는.. 너무 긴 거 같아서 ( 약 50줄 )
답지를 보기로 했다.
답지도 비슷했다.
차이점이라고는 마지막에 i--로 한 거? 정도?
for(int i = N - 1; i >= 1; i--)
{
for(int j = 1; j <= N - i; j++) cout << ' ';
for(int j = 1; j <= 2 * i - 1; j++) cout << '*';
}
꽤 이 방법도 좋다는 생각이 들었다.
아까 나는 전자로 풀었는데
후자로 푸는 방법이 있을까? 싶어서 지피티를 찾아봤다.
지피티는 참 똑똑하다.
더 간단하고.. 쉽지는 않은 식을 알려주었다.
지금 줄은 2N-1줄!
1부터 4까지는 늘어났다가,
5에서 2N-1개 별을 찍고
다시 6부터 9까지는 별의 개수가 줄어든다.
그래서 지피티는
1부터 5까지 별이 늘어나는 패턴
별 : 2i - 1
공백 : N - i
6부터 9까지 별이 줄어드는 패턴
별 : ( 2i -1) - 2(N - 1)
공백 : i - N
이 두식을 이용하여 문제를 풀게 된다.
for (int i = 1; i <= 2*N - 1; i++) {
int stars;
int spaces;
if (i <= N) { // 윗부분
stars = 2*i - 1;
spaces = N - i;
} else { // 아랫부분
stars = 2*(2*N - i) - 1;
spaces = i - N;
}
cout << string(spaces, ' ') << string(stars, '*') << '\n';
}
삼항연산자로 더 줄인 코드도 있다. 나도 삼항연산자 연습 많이 해봐야지!!
for (int i = 1; i <= 2*N - 1; i++) {
int stars = (i <= N) ? (2*i - 1) : (2*(2*N - i) - 1);
int spaces = (i <= N) ? (N - i) : (i - N);
cout << string(spaces, ' ') << string(stars, '*') << '\n';
}
삼항연산자
조건 ? 값 1 : 값 2
조건이 참이면 값 1 실행
조건이 거짓이면 값 2 실행
나중에 또 써먹을 수 있길...!
아니 도대체 이런 생각은 어떻게 하는 걸까?! 참 대단하다.
나는 그냥 하나로 합치면 어떨까.. 한 건데..
대단하다...
마지막으로 string을 풀며 마친다.

혼자 스스로 써봤는데
95% 맞췄으니?
그걸로 됐다.
나 잘했다.
아마도

'C++을 시작해봐요! > 알고리즘을 공부해봐요!' 카테고리의 다른 글
| 바킹독 0x02 문제26 - 별찍기 9 / 백준 2446번 (0) | 2025.09.03 |
|---|---|
| 바킹독 0x02 문제25 - 별찍기 8 / 백준 2445번 (1) | 2025.08.27 |
| 바킹독 0x02 문제23 - 별찍기 6 / 백준 2443번 (1) | 2025.08.22 |
| 바킹독 0x02 문제22 - 별찍기 5 / 백준 2442번 (3) | 2025.08.21 |
| 바킹독 0x02 문제21 - 별찍기 4 / 백준 2441번 (0) | 2025.08.20 |