자료구조와 알고리즘/Baekjoon

[백준][Python] 2438번: 별 찍기 - 1

최문경 블로그 2019. 10. 2. 20:44

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

 

2438번: 별 찍기 - 1

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

www.acmicpc.net

 

 

나도 처음에는 아래와 같이 풀었었다.

 

물론 상관은 없다. 하지만, 별 찍기 문제가 존재하는 이유는 이중 반복문을 이해시키기 위해서이다.

 

그리고 아래처럼 풀면 별 찍기 문제가 어려워질수록 풀기가 힘들어진다는 사실! (나도 이렇게 풀다가 어려워서 검색해보다가 알게되었다.)

1
2
3
4
= int(input())
 
for i in range(1, N+1):
    print("*" * i)
cs

 

 

 

아래의 풀이가 정석인데, N을 입력 받았을 때 N x N 크기의 정사각형이 있다고 생각하고,

i 는 행의 번호, j는 열의 번호를 의미한다고 생각하고 아래의 코드를 보고 이해하려 해보자.

 

1
2
3
4
5
6
7
8
9
= int(input())
 
for i in range(N):
    for j in range(N):
        if (i >= j):
            print("*", end='')
        else:
            print(" ")
    print(" ")
cs
 

 

 

 

5번 줄의 if (i >= j): 가 핵심인데 왼쪽 아래 삼각형의 행과 열번호를 생각해보면 모두 행 번호가 열 번호보다 크거나 같기 때문에 5번 줄이 나온 것이다.

 

    0   1   2   3   4

0  *

1  *    *

2  *    *    *

3  *    *    *    *   

4  *    *    *    *   *