문제
첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다. (마름모 꼴)
*
***
*****
*******
*********
*******
*****
***
*
실행 결과
코드(c++)
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
// 삼각형
for (int i = 1; i <= n; i++) {
for (int j = i; j < n; j++) {
cout << " ";
}
for (int k = 1; k <= 2*i-1; k++) {
cout << "*";
}
cout << "\n";
}
// 역삼각형
for (int i = n-1; i >= 1; i--) {
for (int j = n; j > i; j--) {
cout << " ";
}
for (int k = 1; k <= 2 * i - 1; k++) {
cout << "*";
}
cout << "\n";
}
return 0;
}
코드 설명
중첩 반복문 및 각 변수에 대한 정확한 이해가 필요한 문제이다.
먼저 마름모 꼴을 만들기 위해 모양을 두 부분으로 나누어, 삼각형 두 개를 따로 구현한다.
먼저 1, 2번 모두 총 n번의 줄을 찍으므로 가장 바깥에서 i를 이용해 반복문을 만든다.
그리고 공백과 별이 규칙적으로 늘어나거나 줄어드므로 반복문 내부에서 또 반복문을 돌려야 한다.
1. 상단 삼각형(일반적인 삼각형 모양)
위에서 아래로 갈수록 별이 1,3,5,7..이렇게 늘어난다.
공백의 수는 위에서 아래로 가면서 점점 줄어들고, 별의 수는 점점 늘어난다.
따라서 각 줄마다 (n - i)만큼 공백을 찍고, (2*i - 1)만큼 별을 찍는다.
2. 하단 삼각형 그리기 (역삼각형 모양)
위에서 아래로 갈수록 별이 7, 5,3,1..이렇게 줄어든다.
공백의 수는 아래에서 위로 가면서 점점 늘어나고, 별의 수는 점점 줄어든다.
따라서 각 줄마다 (i - 1)만큼 공백을 찍고, (2*(n-i) + 1)만큼 별을 찍는다.
여기서 주의할 점은 n은 이미 1번에서 찍었기에 제외하고 n-1부터 시작한다.
문제 출처:
2444번: 별 찍기 - 7
첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.
www.acmicpc.net

별찍기 너무 어려워...
'PS' 카테고리의 다른 글
코드트리: 최대공약수와 최소공배수 (0) | 2024.04.28 |
---|---|
백준 2747번: 피보나치 수 (0) | 2024.04.27 |
백준 2231번: 분해합 (0) | 2024.04.24 |
백준 1977번: 완전제곱수 (0) | 2024.04.23 |
백준 1924번: 2007년 (0) | 2024.04.21 |