[BOJ 백준] 2439 - 별 찍기 - 2 (C / C++ / Python)

문제 바로가기

https://www.acmicpc.net/problem/2439


관련 알고리즘

- 해당 없음


정답 및 해설

자연수 N을 입력받아서 예제 출력과 동일한 양식으로 *을 출력하는 문제이다.

예제 출력을 통해 우측 끝으로 정렬된 *을 1개, 2개, 3개,... N개까지 출력하는 문제이다.

* 문자의 좌측을 공백으로 Padding해서 (채워서) 해결할 수 있다.

C++

더보기
#include<iostream>
using namespace std;
int main(){
    int n;
    cin>>n;
    for(int i=1; i<=n; i++){
        for(int k=i; k<n; k++)
            cout<<' ';
        for(int k=0; k<i; k++)
            cout<<'*';
        cout<<'\n';
    }
}

 

Line 해설
6 for 문을 통해 i 를 1부터 n까지 반복한다. 이때 통상 for(i=0; i<n; i++) 로 사용하나
해당 해설의 경우 for(i=1; i<=n; i++) 로 i 의 범위가 1 ~ n 로 설정했음에 유의하자.1)
i 의 범위를 0 ~ n-1로 설정했다면 7번, 9번 라인에서 k 의 범위를 맞게 수정해주면 된다.
7~8 for 문을 통해 k 를 i ~ n-1 반복하며 ' '(공백)을 출력한다.
ex) n=5, i=1 이면 k 는 1 ~ 4 즉, 4번 실행되는 것이다. (4칸의 공백)'*'
9~10 for 문을 통해 k 를 0 ~ i-1 반복하며 '*'을 출력한다.
ex) n=5, i=1 이면 k 는 0 ~ 0 즉, 1번 실행되는 것이다. "    "'*'

1) i 범위를 0 ~ n 으로 설정한 풀이는 C언어에 작성해 두었다. for 문의 구조는 동일하니 필요시 참고하면 될 것이다.


C

더보기
#include<stdio.h>
int main(){
    int n;
    cin>>n;
    for(int i=0; i<n; i++){
        for(int k=i; k<n-1; k++)
            printf(" ");
        for(int k=0; k<i+1; k++)
            printf(" ");
        printf("\n");
    }
}

 

Line 해설
5 for 문을 통해 i 를 0 ~ n-1 반복한다.
6~7 for 문을 통해 k 를 i ~ n-2 반복하며 ' '(공백)을 출력한다.
ex) n=5, i=0 이면 k 는 0 ~ 3 즉, 4번 실행되는 것이다. (4칸의 공백)'*'
8~9 for 문을 통해 k 를 0 ~ i 반복하며 '*'을 출력한다.
ex) n=5, i=0 이면 k 는 0 ~ 0 즉, 1번 실행되는 것이다. "    "'*'

Python

더보기
n=int(input())
for i in range(1,n+1):
    print(' '*(n-i)+'*'*i)

 

Line 해설
1 input 함수를 통해 정수를 입력받은 후, int 함수로 형변환1) 해준다.
2 for 문을 통해 i 를 1 ~ n 만큼 반복한다.
3 print 문을 통해 공백은 n-i 만큼 (n-1, n-2, n-3, ... 1, 0), *은 i만큼 (1, 2, 3, ... n-1, n) 출력한다.

1) input 함수로 입력을 받으면 string 타입으로 입력된다. int(P) 함수는 P를 정수로 변환하는 함수이기에

int(input())으로 작성하여 입력받은 문자를 정수로 치환해야 2번 라인의 range 함수에 넣을 수 있다.