YoungSoo

백준 - 별찍기-10(2447번 파이썬 풀이) 본문

코딩테스트

백준 - 별찍기-10(2447번 파이썬 풀이)

YoungSooSoo 2022. 12. 13. 11:09

이 문제는 골드 5정도의 문제로 도전을 했다가 실패해서 다른 분의 풀이를 보고 이해해서 도움이 됐으면 해서 글을 

올려봅니다.

먼저 문제를 이해해야하는데 이 문제의 분류는 재귀함수로 분류되어 있어 함수를 만드는 방식으로 풀었고

저는 가장 작은 단위를 3일 때 위의 모양을 제일 작은 단위로 생각하고 이해하면 쉽게 이해했습니다.

9일때의 모양을 보면 가장 작은 단위로 생각한 모양을 *하나로 생각했을 때 가장 작은 단위의 도형이 된 것을

알 수 있었습니다.

import sys
input = sys.stdin.readline

def star(n):
	if n == 1:
		return['*']
	stars = star(n//3)
	arr = []
	for s in stars:
		arr.append(s*3)
	for s in stars:
		arr.append(s+' '*(n//3)+s)
	for s in stars:
		arr.append(s*3)
	
	return arr

n = int(input())
print('\n'.join(star(n)))

먼저 star이라는 함수를 만들어 가장 작은 단위인 *을 1일 때 리턴해주고 stars를 만들어 1, 3, ... ,n을 재귀함수로
저장해주었고 반복문을 통해 형태를 가장 작은 단위부터 하나씩 도형을 만들어 배열에 저장해 마지막에 리턴하고

그 뒤에 문자열을 합치는 함수인 join을 통해 출력해주도록 했습니다.