
아래 백준 로고를 클릭하면 해당 문제로 이동합니다 😀
디미고에서 진짜 지겹게 했던 별찍기였다 ...
1학년때는 별찍기조차 이해가 어려웠는데 지금은 뭐 ... 누워서 떡먹기죠 ~
해당 문제는 마름모를 출력하는 문제로, 위쪽 정삼각형을 출력하는데 for문 1개를 사용하고,
아래쪽 정삼각형을 출력하는데 다른 for문을 사용해 크게 2개의 for문을 사용할 수 있다.
위쪽 정삼각형을 출력할 때 고려해야할 공백과 별의 개수이다.
| iter | 공백 개수 | 별 개수 |
|---|---|---|
| 0 | 4 | 1 |
| 1 | 3 | 3 |
| 2 | 2 | 5 |
| 3 | 1 | 7 |
| 4 | 0 | 9 |
문제 예시의 경우 n=5이므로, 공백개수는 n-(i+1)이고 별의 개수는 2i + 1가 된다.
아래쪽 정삼각형을 출력할 때 고려해야할 공백과 별의 개수이다.
| iter | 공백 개수 | 별 개수 |
|---|---|---|
| 0 | 1 | 7 |
| 1 | 2 | 5 |
| 2 | 3 | 3 |
| 3 | 4 | 1 |
위쪽 정삼각형과 아래쪽 정삼각형에서 별의 개수가 9인 부분은 겹치게 되므로, 제외하고 생각해보자!
문제 예시의 경우 n=5이므로, 공백개수는 i+1이고 별의 개수는 (2n -1) - 2(i+1)가 된다.
반복 범위를 2n - 1로 설정하여 위 아래 끊어서 출력하지 않고, for문 안에서 if문으로 조건을 작성해 출력을 조정해줬다.
문제 예시의 경우 n=5일때 전체 for문에서 고려해야할 공백과 별의 개수이다.
| iter | 공백 개수 | 별 개수 |
|---|---|---|
| 0 | 4 | 1 |
| 1 | 3 | 3 |
| 2 | 2 | 5 |
| 3 | 1 | 7 |
| 4 | 0 | 9 |
| 5 | 1 | 7 |
| 6 | 2 | 5 |
| 7 | 3 | 3 |
| 8 | 4 | 1 |
이 경우, i < n 조건을 걸면 위쪽 정삼각형과 아래쪽 정삼각형을 나눌 수 있다.
위 조건이 참인 경우, 공백 개수는 n-i-1이고 별의 개수는 2i + 1이다.
하지만 조건이 거짓인 경우, 공백 개수는 i-n+1이고 별의 개수는 (2n-1) - 2*(i-n+1)이다.
1. for문 2개 사용
n = int(input())
for i in range(n):
for _ in range(n-i-1):
print(" ", end = "")
for _ in range(2*i+1):
print("*", end = "")
print()
for i in range(n-1):
for _ in range(i+1):
print(" ", end = "")
for _ in range((2*n-1) - 2*(i+1)):
print("*", end = "")
print()
2. for문 1개 사용
출력 시에는 위에 코드처럼 이중 포문을 사용해도 되지만 간단하게 작성해봤다.
for i in range(2*n - 1):
if i < n :
print(' ' * (n-i-1), end = '')
print('*' * (2*i+1))
else :
print(' ' * (i-n+1), end = '')
print('*' * ((2*n -1) - (2*(i-n+1))))
