[백준/Python] 2447 별 찍기 - 10

재활용병·2024년 1월 25일
0

코딩 테스트

목록 보기
123/157

[백준/Python] 2447 별 찍기 - 10


정답 코드 및 설명

def draw_stars(n):
    if n == 1:
        return ['*']
    Stars = draw_stars(n//3)
    pattern = []
    for star in Stars:
        pattern.append(star * 3)
    for star in Stars:
        pattern.append(star + ' ' * (n//3) + star)
    for star in Stars:
        pattern.append(star * 3)
    return pattern

N = int(input())
stars = draw_stars(N)
for star in stars:
    print(star)

문제 개념 설명

별 찍기 문제는 주어진 N 크기에 따라 특정 패턴의 별을 출력하는 문제다. N은 3의 거듭제곱이며, 이 문제의 핵심은 크기가 N인 패턴을 재귀적으로 구성하는 것이다. 가장 작은 단위는 N=1일 때, 별 하나를 찍는 것이고, 이를 기반으로 N이 커질 때마다 패턴을 확장해 나간다.

접근 방법

이 문제를 해결하기 위해 재귀 함수를 사용한다. 재귀 함수는 자기 자신을 호출하여 같은 작업을 반복 수행하되, 매번 문제의 크기를 줄여나가는 방식으로 문제를 해결한다. 본 문제에서는 N을 3으로 나눈 크기의 패턴을 기반으로 전체 패턴을 구성한다. 이 과정에서 중앙에는 공백이 생기며, 이는 크기 N/3 패턴을 둘러싸는 형태로 나타난다.

코드 설명

  • 재귀 함수 정의: draw_stars(n) 함수는 크기 n에 해당하는 별 패턴을 생성한다. n이 1일 때는 기본 단위인 별 하나를 반환한다.

  • 재귀적 패턴 생성: n이 1보다 클 때, draw_stars(n//3)을 호출하여 n/3 크기의 패턴을 먼저 생성한다. 이 패턴을 이용해 전체 패턴을 구성한다.

  • 패턴 구성: 생성된 n/3 크기의 패턴(Stars)을 이용해,

  1. 상단에는 별 패턴을 3번 반복한다.
  2. 중앙에는 별 패턴, 가운데 공백, 별 패턴 순으로 배열한다. 가운데 공백의 크기는 n/3이다.
  3. 하단에도 별 패턴을 3번 반복한다.
  4. 이 과정을 통해 전체 패턴이 완성된다.
  • 입력 및 출력: 사용자로부터 N을 입력 받고, draw_stars(N) 함수를 호출하여 별 패턴을 생성한다. 생성된 패턴을 순회하며, 각 줄의 별 패턴을 출력한다.
profile
코딩 말고 개발

0개의 댓글

관련 채용 정보