1. 문제 상세
https://www.acmicpc.net/problem/2444
2. 문제 접근
이전에 풀었던 별 찍기 문제들처럼 줄 수를 입력받고 이중 반복문을 사용하여 별을 찍는것은 동일하다.
하지만 이번에는 입력 받은 줄 수만큼 바로 출력하는 것이 아니고 입력이 n 이라고 할 때 2 x n - 1 번 줄을 출력한다.
주어진 규칙에 따라 출력하려면 먼저, 공백은 줄마다 n - 1, n - 2, ... 0 순으로,
별은 1부터 2씩 늘려가며 2 x n - 1 까지(1, 3, 5, ... 2 x n - 1)를 n 번 출력한다.
별 출력 구조가 가운데 가장 긴 줄을 기준으로 위 아래 대칭 형태이다.
지금 위의 작업으로 위쪽 부터 가운데 줄까지 출력했기 때문에 가운데 줄을 제외한 아래 부분을 출력해야 한다.
그렇다면 이제 위의 출력에서 가운데 줄을 제외 한 뒤 반대로해서 n - 1 번 출력하자.
줄마다 공백은 1, 2, 3, ... n - 1 순서로 출력하고, 별은 2 x (n - 1) 개부터 2씩 줄여가며(2 x (n - 1) ... 5, 3, 1) 출력한다.
3. 문제 풀이
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
for(int i = 1; i <= n; i++) {
for(int j = n - i; j > 0; j--) cout << " ";
for(int j = 0; j < 2 * i - 1; j++) cout << "*";
cout << "\n";
}
for(int i = 1; i < n; i++) {
for(int j = 0; j < i; j++) cout << " ";
for(int j = 2 * (n - i); j > 1; j--) cout << "*";
cout << "\n";
}
}
정수형 변수 n 을 선언하고, cin 으로 정수를 입력받아 n 에 저장한다.
for문으로 i 가 1부터 n 보다 작거나 같을 때 1씩 더하며 반복한다.
반복에서는 for문으로 j 가 n - i 값 부터 0보다 클 때 1씩 빼며 반복하고, 반복에서 공백을 하나 출력한다.
위 반복이 끝나면 for문으로 j 가 0부터 2 x i - 1 값 보다 작을 때 1씩 더하며 반복, 반복에서는 별을 하나 출력한다.
위 반복이 끝나면 개행문자를 출력한다.
위의 for문이 모두 끝나면 새로운 for문으로 i 가 1부터 n 보다 작을 때 1씩 더하며 반복한다.
반복에서는 for문으로 j 가 0부터 i 보다 작을 때 1씩 더하며 반복하고, 공백을 하나 출력한다.
위 반복이 끝나면 for문으로 j 가 2 x (n - i) 값 부터 1보다 클 때 1씩 빼며 반복하고, 별을 하나 출력한다.
위 반복이 끝나면 개행문자를 출력한다.
4. 성능 확인
5. 마무리
이전 별 문제들보다 조건이 까다로워졌다.
규칙에 따라 for문의 카운터 변수를 잘 활용하자.
'백준 - 단계별로 풀어보기 > 심화 1' 카테고리의 다른 글
[백준] 2941번 : 크로아티아 알파벳 | C++ (0) | 2023.10.11 |
---|---|
[백준] 1157번 : 단어 공부 | C++ (1) | 2023.10.11 |
[백준] 10988번 : 팰린드롬인지 확인하기 | C++ (0) | 2023.10.11 |
[백준] 3003번 : 킹, 퀸, 룩, 비숍, 나이트, 폰 | C++ (0) | 2023.09.26 |
[백준] 25083번 : 새싹 | C++ (0) | 2023.09.26 |