제목보고 아 별찍기 ?
소싯적에 별좀 찍엇지 ㅋ 하고 들어갔다가
오래오래 노트북을 덮지 못했다는 ,... 슬픈 이야기
우선 N = 3 일때 결과는
***
* *
***
그 다음 N = 3**2 = 9 일때는
*********
* ** ** *
*********
*** ***
* * * *
*** ***
*********
* ** ** *
*********
가운데 3X3 공백이 있고 N = 3일때의 패턴이 반복된다.
def star(n):
# print(n)
if n == 1:
return ['*']
stars = star(n//3)
a = []
for i in stars:
a.append(i*3)
for i in stars:
a.append(i+' '*(n//3)+i)
for i in stars:
a.append(i*3)
return a
N = int(input())
# print(star(N))
print('\n'.join(star(N)))
만약에 N = 27 이라면 9X9 크기의 N = 9일때 패턴이랑 같아야하고
N = 9 는 3 X3 크기의 N = 3일때 패턴이 반복되어야 한다.
함수 실행 순서는 star(1) - star(3) - star(9) - star(27)
N 이 27이라고 가정하고 설명하자면,
먼저 우리는 N = 3 일때 패턴을 알고있다.
처음엔 이 패턴을 그대로 가지고 어떻게 못하나 생각도 했는데
가운데 공백을 둬야 해서 복잡해질것같아 별 하나로 그냥 쪼개버렸다.
그리고 3일때 패턴을 만들어주고
3일때의 패턴을 이용해서 리스트에 append 해줬다.
star(3) 일때 a 리스트는 문제에 나와있던 패턴 그대로다.
a -> ['***', '* *', '***']
star(9)일때 a 리스트는 원래 a 리스트 반복을 돌면서 똑같이 반복해주고 가운데값은 공백이어야 하기때문에
원래 리스트에 있던 값에 n에 3나눠준 몫 크기만큼 공백 넣어줬다.
처음에 N = 3일때 패턴으로 냅다 어떻게 해보려고 하느라
시간을 낭비했다.
아 그리고 처음에 문제 이해를 못해가지고
문제랑 치열한 눈싸움도 좀 했다.
근데 문제에서 3일때 패턴을 줬으니까 미리 리스트에 넣어줘도 됬을 것 같기도 하고 ,,?
재귀함수 예외 처리를 1이 아니라 3으로 바꾸고,,
오늘은 머리가 아파서 그만,,,
'알고리즘 > Python' 카테고리의 다른 글
[python] 백준 4779 : 칸토어 집합 (재귀) (0) | 2024.02.19 |
---|---|
[python] 백준 1541 : 잃어버린괄호 (그리디) (0) | 2024.02.15 |
[python] 백준 6603 : 로또 (combination, 백트랙킹) (0) | 2024.02.14 |
제너레이터 표현식 (0) | 2024.02.12 |