https://www.acmicpc.net/problem/2444
풀이
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n - i; j++)
cout << " ";
for (int k = 1; k <= 2 * i - 1; k++)
cout << "*";
cout << endl;
}
for (int i = n - 1; i >= 1; i--)
{
for (int j = 1; j <= n - i; j++)
cout << " ";
for (int k = 1; k <= 2 * i - 1; k++)
cout << "*";
cout << endl;
}
return 0;
}
의외로 이중for문을 쓰면 식 자체는 간단한 것인데 생각하는데 오래 걸렸습니다.
아마 몇시간째 코딩을 풀다보니 과부화가 온 것이 아닐까 생각이 드네요.. 이거를 풀고 쉬려했는데 여기에서 머리를 넘 많이 써버린 느낌이에요.
먼저 이 문제를 처음 접근할 때 출력되는 구조를 봐야합니다.
증가하는 부분/ 감소하는 부분 이것을 끊어서 for문을 넣어야 합니다. for문에서 감소하다가 증가로 바꿔주는 하나의 식은 없기 때문에 두 식으로 나눠주어야 합니다.
첫번째 for문
" " 공백은 계속해서 줄어들고 별은 2*n -1번씩 증가를 합니다. 따라서 " " 공백은 계속해서 줄여야 하기 때문에 이줄 for문의 2번째 조건에 j <= n -1을 넣어주었습니다. 그러면 i가 증가함에 따라 j는 감소하게 되는 것입니다.
그리고 별을 출력해주는 것은 2*i -1을 통해 1, 3, 5, 7, 9 이런식으로 늘어나도록 설정을 해주었습니다.
두번째 for문
두 번째 for문은 감소하는 방식이기 때문에 int i = n-1로 잡아주었고 i >=1보다 클 때 i--가 되도록 해주었습니다. 예제처럼 n이 5일때는 4부터 시작을 해줍니다.
이중 for문의 안쪽 첫번째 for문에서는 공백이 0 , 1, 2, 3, 4 이런식으로 증가해야 하기 때문에 j = 1부터 n - i 번째까지 넣어주었습니다. 증가하려면 i가 점점 감소하는 상태가 됩니다.
그리고 별은 계속해서 감소해야 하기 때문에 별이 2 * i - 1인 것은 전에 식과 동일하지만 이번에 i는 감소하기 때문에 별이 9 7 5 3 1 이런 식으로 감소하게 됩니다.
'IT 프로그래밍 > 백준' 카테고리의 다른 글
[C++] 백준 10988번 팰린드롬인지 확인하기 (0) | 2024.03.29 |
---|---|
[C++] 백준 2440번 별 찍기 -3 (0) | 2024.03.27 |
[C++] 백준 11718번 그대로 출력하기 (0) | 2024.03.25 |
[C++] 백준 3003 킹, 퀸, 룩, 비숍, 나이트, 폰 (0) | 2024.03.25 |
[C++] 백준 5622 다이얼 (0) | 2024.03.25 |