728x90
반응형

문제

첫째 줄에는 별 2×N-1개, 둘째 줄에는 별 2×N-3개, ..., N번째 줄에는 별 1개를 찍는 문제

별은 가운데를 기준으로 대칭이어야 한다.

입력

첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

출력

첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.

예제 입력 1

5

예제 출력 1

*********
 *******
  *****
   ***
    *

 

내가 작성한 코드 (C++ 성공)

#include <iostream>

using namespace std;

int main(){

    int n;
    int m = 1;
    cin >> n;

    for(int i=0; i<n; i++){
    	for(int k=0; k<i; k++){
        	cout << " ";
		}
        for(int j=i; j<2*n-m; j++){
        	cout << "*";
        }
        m++;
        cout << "\n";
    }

    return 0;
}

 

정리

쉬운 줄 알았는데 생각보다 오래 걸린 문제다.
별찍기 문제는 정말 보기 쉬운 문제라서 그런지 여러 종류의 형태로 많은 예제가 만들어지는 것 같다.
그래서 그런지 내 코드보다 더 효율적으로 더 쉽게 작성된 코드가 많을 것 같다는 생각이 든다.

나는 일단 문제에 홀수개로 찍히는 것이 나와있기 때문에 참고해서 문제를 풀었다.

일단, 하나의 반복문으로 앞쪽에 빈칸을 만들어주었다.

    int n;
    int m = 1;
    cin >> n;

    for(int i=0; i<n; i++){
    	for(int k=0; k<i; k++){
            cout << " ";
        }
    }

이렇게 반복문으로 앞 쪽에 빈칸을 만들어주었다.

그리고 문제에 나와있는 공식을 그대로 이용해서 반복문을 하나 더 만들었는데

    int n;
    int m = 1;
    cin >> n;

    for(int i=0; i<n; i++){
    	for(int k=0; k<i; k++){
        	cout << " ";
        }
        for(int j=i; j<2*n-m; j++){
        	cout << "*";
        }
        m++;
        cout << "\n";
    }

문제에 나와있는 공식을 그대로 가져와서 출력해주었다.

빈칸을 만들어준 이후에 문제에 공식을 그대로 가져와 그만큼 출력해주었고
m 변수를 사용해서 갯수를 조절해주었다.
그랬더니 원하는 결과를 출력할 수 있었다.

다른 사람들이 작성한 코드를 한번 봐야할 것 같다.
난 정말 하드하게 코딩했다고 생각하는데 더 잘 짜여진 코드를 확인해보면 좋을 것 같다.

728x90
반응형
복사했습니다!