본문 바로가기

컴퓨터/백준 알고리즘

백준 알고리즘 2439번: 별 찍기 - 2 [C++]

문제 출처: www.acmicpc.net/problem/2439

 

2439번: 별 찍기 - 2

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.

www.acmicpc.net

 

1. 코드

(실행)

 

2. 풀이

예시

예시로 먼저 설명을 하겠다. 5를 입력했을 때 위 그림과 같이 나오는데 패턴을 아래 표는 패턴을 정리한 것이다.

  띄어쓰기 횟수 * 횟수
첫 번째 줄 4번 1번
두 번째 줄 3번 2번
세 번째 줄 2번 3번
네 번째 줄 1번 4번
다섯 번째 줄 0번 5번

그렇다면 아래 표와 같이 표현할 수 있다.

  띄어쓰기 횟수 * 횟수
첫 번째 줄 5 - 1 = 4번 5 - (5 - 1)  = 5 - 4 = 1번
두 번째 줄 5 - 2 = 3번 5 - (5 - 2) = 5 - 3 = 2번
세 번째 줄 5 - 3 = 2번 5 - (5 - 3) = 5 - 2 = 3번
네 번째 줄 5 - 4 = 1번 5 - (5 - 4) = 5 - 1 = 4번
다섯 번째 줄 5 - 5 = 0번 5 - (5 - 5) = 5 - 0 =5번

그래서 이것을 코드로 표현할 떼 변수와 반복문을 이용하여 해결할 수 있을 것이다.

int n;
cin >> n;

별의 줄을 입력받을 변수 n을 선언하고 cin을 통해 입력받는다.

for (int i = 1; i <= n; i++)

그리고 i라는 변수를 1로 초기화하고 n만큼 반복하게 한다. 여기서 i의 값을 1로 한 것은 변수 i를 계산에 이용할 때 조금 더 편하게 계산하기 위해 1로 초기화했다.

 for (int j = 0; j < n - i; j++)
    cout << " ";

그리고 j를 n - i만큼 반복한다. 반복한 횟수만큼 띄어쓰기를 해준다.

for (int j = 0; j < n - (n - i); j++)
    cout << "*";

그리고 n - (n - i)만큼 *를 출력한다.

cout << endl;

마지막에 개행을 해주어서 줄을 구분시켜준다.