몽상실현개발주의

[BOJ] 2447 / 별 찍기 - 10 / Python 파이썬 본문

Algorithm PS/BOJ

[BOJ] 2447 / 별 찍기 - 10 / Python 파이썬

migrationArc 2021. 6. 28. 09:00

[BOJ] 2447 / 별 찍기 - 10 / Python 파이썬

[BOJ] 2447 / 별 찍기 - 10 / Python 파이썬

https://www.acmicpc.net/problem/2447

 

2447번: 별 찍기 - 10

재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이

www.acmicpc.net

 

풀이

부분의 구조가 반복되어 전체의 구조를 만드는 프랙탈 문제이다.

 

기본 모형을 분할정복으로 구성해 나가며 해결하여야 한다.

하지만 실제로 구현하는것이 너무 어렵게 느껴졌고, 다른분들의 풀이를 참고 하였지만 이해하는데 꽤 시간이 걸렸다.

(그 이유로 몇일간 다른 풀이 및 블로그 포스팅을 하지 못하였다...)

 

첫번째로 주어진 기본 모형을 규칙에 따라 그리는 것을 먼저 하였다.

N = int(input())

stars = ["***", "* *", "***"]

cnt = 0
while N > 3:
    N //= 3
    cnt += 1


def makeStar():
    L = len(stars)
    newStars = []
    for i in range(L*3):
    	newStars.append(stars[i % L]*3)
    return newStars


for i in range(cnt):
    stars = makeStar()

for star in stars:
    print(star)


그리고 빈칸을 만드는 규칙을 추가 하였다.

N = int(input())

stars = ["***", "* *", "***"]

cnt = 0
while N > 3:
    N //= 3
    cnt += 1


def makeStar():
    L = len(stars)
    newStars = []
    for i in range(L*3):
    	# 빈칸을 만드는 규칙
        if i // L == 1:
            newStars.append(stars[i % L] + " " * L + stars[i % L])
        else:
            newStars.append(stars[i % L]*3)
    return newStars


for i in range(cnt):
    stars = makeStar()

for star in stars:
    print(star)

 

※ 블로그를 참고하여 문제를 해결하고도 한참을 고민한 후에야 "학습했다" 라는 느낌이 드는 문제였다.

 


참고 블로그

https://velog.io/@jini_eun/%EB%B0%B1%EC%A4%80-2447%EB%B2%88-11729%EB%B2%88-Java-Python

 

[백준] 2447번, 11729번 / Java, Python

Java / Python2447번 재귀적인 패턴을 재귀함수로 찍는 문제 1재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다.크기 3의 패턴은

velog.io

 

Comments