[백준] 2444번 별 찍기 - 7 | 파이썬 Python

문제

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

 

입력

첫째 줄에 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`을 기준으로 인덱스를 순서대로 나열한 경우와 인덱스를 역순으로 뒤집은 경우로 나눠서 출력한다.