문제
풀이
두 가지 방법으로 풀 수 있다.
1. 별을 9개의 공간으로 나눈뒤 1번 공간의 별이 5번 공간을 제외한 나머지 공간의 별에 똑같이 복사한다.
2. 1번 풀이에 비해 좀 더 직관적이며 속도가 빠르다. 공간을 1, 2, 3으로 나눈 후 재귀함수를 통해 구해진 별을 붙인다(append).
코드
1번 풀이
import sys
sys.setrecursionlimit(10**6)
def paint_star(LEN):
DIV3 = LEN//3
if LEN == 3:
g[1] = ['*', ' ', '*']
g[0][:3] = g[2][:3] = ['*']*3
return
paint_star(DIV3)
for i in range(0, LEN, DIV3):
for j in range(0, LEN, DIV3):
if i != DIV3 or j != DIV3:
for k in range(DIV3):
g[i+k][j:j+DIV3] = g[k][:DIV3]
n = int(sys.stdin.readline().strip())
g = [[' ' for _ in range(n)] for _ in range(n)]
paint_star(n)
for i in range(n):
for j in range(n):
print(g[i][j], end='')
print()
2번 풀이
import sys
sys.setrecursionlimit(10**6)
def append_star(LEN):
if LEN == 1:
return ['*']
Stars = append_star(LEN//3)
L = []
for S in Stars:
L.append(S*3)
for S in Stars:
L.append(S+' '*(LEN//3)+S)
for S in Stars:
L.append(S*3)
return L
n = int(sys.stdin.readline().strip())
print('\n'.join(append_star(n)))
'CS > 알고리즘 문제 풀이' 카테고리의 다른 글
[백준] 14503 - 로봇 청소기 [Python(파이썬)] (2) | 2021.01.26 |
---|---|
[백준] 9020 - 골드바흐의 추측 [Python(파이썬)] (0) | 2021.01.26 |
[백준] 2468 - 안전 영역 [Python(파이썬)] (0) | 2021.01.23 |
[백준] 1780 - 종이의 개수 [Python(파이썬)] (0) | 2021.01.23 |
[백준] 11279 - 최대힙 [Python(파이썬)] (0) | 2021.01.23 |