문제
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
입력
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
출력
첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.
예제
나의 풀이
import math
N = int(input())
cnt = 2*N-1
half = math.ceil(cnt/2)
for i in range(1, cnt+1):
if (i < half):
print(" "*(half-i) + "*"*(2*i-1) + " "*(half-i))
elif (i == half):
print("*"*cnt)
elif (i > half):
print(" "*(i-half) + "*"*((cnt-i+1)*2-1) + " "*(i-half))
- `2×N-1`을 절반으로 나눠서 인덱스가 절반보다 작은 경우, 절반과 일치하는 경우, 절반보다 큰 경우로 나눠서 문제를 풀었다.
- 풀이가 너무 지저분해서 더이상의 설명은 생략한다....
다른 사람의 풀이
N = int(input())
for i in range(1, N):
print(" "*(N-i) + "*"*(i*2-1))
for i in range(N, 0, -1):
print(" "*(N-i) + "*"*(i*2-1))
- 리스트를 `[5, 4, 3, 2, 1]`과 같이 역순으로 만든다는 점이 핵심인 풀이
- `N`을 기준으로 인덱스를 순서대로 나열한 경우와 인덱스를 역순으로 뒤집은 경우로 나눠서 출력한다.