본문 바로가기
백준 알고리즘/python_

[백준 알고리즘][python] 2439번. 별찍기 - 2

by nanee_ 2021. 8. 3.
728x90
반응형
SMALL
 

2439번: 별 찍기 - 2

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

www.acmicpc.net

 

 

# 문제

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

하지만, 오른쪽을 기준으로 정렬한 별을 출력하시오.

 

# 입력

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

 

# 출력

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

 

 

 

# 정답입니다!

# ver1

a = int(input())

for i in range(a) :
    for j in range(a):
        if i + j <= a - 2 :
            print(' ', end = '')
        else :
            print('*', end = '')
    print()

5

      *

    **

   ***

 ****

*****

 

a를 입력받고, 이중 for문으로 행과 열로 i와 j가 움직이게 끔 해준다. (i=행, j=열)

if문으로 조건을 만족하는 곳에 '*'를 찍어주어야 하는데,

여러가지로 계산을 해보니 i+j가 a-2보다 작거나 같은 경우를 제외하고 '*'을 찍어주면 되는 것을 알게 되었다.

 


 

a=3일 경우를 예로 하고 설명을 해보자면,

 

회색 칸이 공백으로, 주황색 칸이 *로 채워질 부분이다.

i+j ≥ 2 일 경우에 주황색(*)으로 채워지는 것을 알 수 있다.

 

즉, i+j >= 1 일 경우에는 회색(공백)이 채워진다는 것이다.

1은 a=3에서 -2를 한 수a-2로 표현할 수 있다.

 

 

 

결론적으로 i+j >= a-2 일 경우엔 공백으로, 이외에는 '*'로 채워지도록 조건을 만들 수 있다.

 

 

 

(수학적으로 좀 더 잘 설명해주실 수있는 분은 쪽지나 댓글 환영합니다!!)

 

 


# ver2

a = int(input())

for i in range(1, a+1) :
    print(('*' * i).rjust(a))

5

      *

    **

   ***

 ****

*****

 

 

위의 풀이(ver1)보다 간결한 코드이다.

이전 포스팅인 '별찍기-1' 에서 했던 코드에서 조금 변형시켰다.

 

1부터 입력받은 숫자의 a+1까지 반복하는 for문에서 i번 째일 때마다 '*'을 i번 만큼 찍어주는데

그것들을 .rjust(a) 으로 오른쪽 정렬을 시켜서 출력시킨다.

 

 

 

 

 

 

728x90
반응형
LIST