문제
입력받은 숫자만큼 아래와 같은 모양으로 별을 찍는 프로그램을 작성하라.
# 입력
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="")