반응형
입력값 n 의 범위가 1 <= n <= 100 일때 아래와 같이 출력하는 문제다.
이런 도형류의 별찍기는 for문을 나눠서 생각해야한다.
1. 크게 봤을 때 반복되는 패턴이 보이는 부분
2. 한줄한줄 개행을 위한 for문
3. 앞, 뒤(는 필요시) 공백
4. 별
나는
1. 위에 뒤집어진 삼각형과 아래 삼각형을 서로 다른 for문으로 나눴고
2. 개행은 i = 0 부터 i<n 일 때까지, 근데 가운데 줄이 겹치니까 아래 삼각형은 시작을 i = 1부터로 해줬다.
3. 앞쪽 공백은
위쪽 삼각형은 공백이 0, 1, 2, 3, 4, 아래 삼각형은 3, 2, 1, 0 칸만큼 있다.
따라서 위쪽은 j = 0, j<n-1, 아래쪽은 j = n - i - 1, j > 0 이라는 조건을 넣어주었다.
4. 별
위쪽 삼각형에선 9, 7, 5, 3, 1로 별의 개수가 줄어들고 있어서 j = 0, j < (2*n-1) - i*2 라는 조건을 주었다.
그럼 각 줄별로 0부터 9-0, 9-2, 9-4, 9-6, 9-8 까지 별이 찍힌다.
아래 삼각형은 3, 5, 7, 9로 올라가기 때문에 우선 가장 큰 for문을 0부터가 아닌 1부터 n까지로 적었고,
줄별로 j =0, j< (i*2)+1 로 조건을 주었다.
몇년만에 별찍기 푸는거라 코드가 매끄럽진 않은 것 같긴하다..
코드
#include<iostream>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n;
cin >>n;
for(int i=0;i <n; i++){
for(int j = 0; j<i; j++) cout<<" ";
for(int j = 0 ; j < (2 * n - 1) - i * 2; j++) cout<< "*";
cout<<"\n";
}
for(int i = 1; i<n; i++){
for(int j = n - i - 1; j > 0 ; j--) cout<<" ";
for(int j = 0; j< (2*i) +1; j++ ) cout<< "*";
cout<<"\n";
}
return 0;
}
문제 링크 : https://www.acmicpc.net/problem/2446
반응형
'알고리즘' 카테고리의 다른 글
[백준/BOJ] acmicpc 14938 서강그라운드 C++ (다익스트라) (0) | 2024.05.29 |
---|---|
[백준/BOJ] acmicpc 11799 최소비용 구하기2 C++ (다익스트라) (0) | 2024.05.29 |
[백준 / BOJ] acmicpc 1699 제곱수의 합 C++ (0) | 2022.05.01 |
[백준/BOJ] acmicpc 1676 팩토리얼 0의 개수 (2) | 2021.11.16 |
[백준 / BOJ] acmicpc 10989 수 정렬하기3 (8) | 2021.10.25 |