Algorithm/백준

[BOJ] 2444번 별 찍기 -7

비번변경 2021. 11. 5. 19:34

문제

입력받은 숫자만큼 아래와 같은 모양으로 별을 찍는 프로그램을 작성하라.

# 입력
5

# 출력
    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *

 

풀이

내 풀이

n번째 줄을 기준으로 공백의 수는 늘어나고, 별의 수는 줄어든다. 반복문을 두 번 돌리는 방식으로 문제를 해결한다.

import sys

n = int(sys.stdin.readline())
for i in range(n):
    print(" " * (n - 1 - i), "*" * (2 * i + 1), sep="")
for i in range(n - 2, -1, -1):
    print(" " * (n - 1 - i), "*" * (2 * i + 1), sep="")

print문이 중복이기 때문에, 중복 코드를 줄일 방법이 없는지 고려해보는 것이 좋아 보인다.

 

 

다른 풀이

절댓값을 이용해서 문제를 해결할 수도 있다. 규칙이 왜 저렇게 나오는지는…… 잘 따져보도록 하자…….

n = int(sys.stdin.readline())

for i in range(2 * n - 1):
    print(" " * abs(n - i - 1), "*" * (2 * (n - abs(n - i - 1)) - 1), sep="")