백준 2447번 파이썬 별찍기 - 10
2447번: 별 찍기 - 10
재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이
www.acmicpc.net
위의 사진은 n == 27일 때 패턴과 주황색으로 표시한 부분은 n== 9일 때의 패턴이다.
그림을 보면 n==9 일 때는 n == 3 일 때의 패턴을 기준으로 만들어지고, n == 27일 때는 n == 9일 때의 패턴을 기준으로 만들어지는 것을 알 수 있다.
아이디어
n == 3일 때의 패턴을 배열로 나타내면
arr = ['***', '* *', '***'] 로 표현할 수 있다.
n == 9일 때의 패턴을 찾아보자.
1. arr의 각 원소를 꺼내어 (원소*3 번씩) 줄바꿈을 두고 출력한다. (1 ~ 3번째줄까지 출력)
2. 가운데 공백을 출력해야하므로, 각 원소를 꺼내어 공백을 n//3 만큼두고 출력 -> '***' + n//3* '공백' + '***' 이런식으로 출력(4 ~ 6번째줄까지 출력)
3. 1번처럼 출력(7 ~ 9번째줄까지 출력)
마찬가지로 n == 27이라면 arr을 n == 9일 때 기반으로 만들어진 원소를 가지고 위와 같은 방법으로 패턴을 만들 수 있다.
코드
n = int(input())
def star(l):
if l == 3:
return ['***','* *','***']
arr = star(l//3)
stars = []
for i in arr:
stars.append(i*3)
for i in arr:
stars.append(i+' '*(l//3)+i)
for i in arr:
stars.append(i*3)
return stars
print('\n'.join(star(n)))
**참고로 join 함수는
'구분자'.join(리스트)
=> 리스트의 값과 값 사이에 '구분자'를 넣어서 하나의 문자열로 합쳐준다.'
ex) _'.join(['a', 'b', 'c']) 라 하면 "a_b_c" 와 같은 형태로 문자열을 만들어서 반환.
즉 이 코드는 줄을 크게 3줄로 나누어서 사이에 \n 줄바꿈을 넣어 출력하는 방식인 셈이다.
코드이해를 돕고자 아래와 같이 그림을 그려보았다.
참고자료
[python] 파이썬 join 함수 정리 및 예제 (문자열 합치기)
안녕하세요. BlockDMask입니다. 오늘은 파이썬에서 리스트를 문자열로 일정하게 합쳐주는 join 함수에 대해서 알아보려고 합니다. join 함수는 문자열을 다룰 때 유용하게 사용할 수 있는 함수이니
blockdmask.tistory.com
백준 파이썬 2447 별찍기 - 10
https://www.acmicpc.net/problem/2447 2447번: 별 찍기 - 10 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운..
sujeng97.tistory.com