728x90
[백준알고리즘] 2447번: 별 찍기 10 -Python
https://www.acmicpc.net/problem/2447
모든 공간을 *로 채워준 다음에 지워야 할 부분들을 지워주었다. 각 상태에서 9개의 구역을 나눠 가운데에 위치한 구역은 모두 빈칸 ' '을 만들어주어야 한다. 그리고 나눠진 작은 구역들도 반복해서 수행해준다.
아래에 새롭게 푼 코드를 추가했는데 재귀를 사용해서 더 깔끔하게 풀었다.
def rm(i, j, size):
if size == 1: return
new_size = size//3
for ri in range(3):
for rj in range(3):
if ri == 1 and rj == 1:
for ti in range(i + ri*new_size, i + (ri+1)*new_size):
for tj in range(j + rj*new_size, j + (rj+1)*new_size):
table[ti][tj] = ' '
continue
rm(i + ri*new_size, j + rj*new_size, new_size)
n = int(input())
table = [['*']*n for _ in range(n)]
rm(0, 0, n)
for t in table:
print(''.join(t))
def blank(t, x, y):
if t == 1: return
sx, ex= x + t//3, x + (t//3)*2
sy, ey= y + t//3, y + (t//3)*2
for i in range(sx, ex):
for j in range(sy, ey):
table[i][j] = ' '
blank(t//3, x, y)
blank(t//3, sx, y)
blank(t//3, ex, y)
blank(t//3, x, sy)
blank(t//3, ex, sy)
blank(t//3, x, ey)
blank(t//3, sx, ey)
blank(t//3, ex, ey)
"""
***
* *
***
"""
n = int(input())
table = [['*'] * n for _ in range(n)]
blank(n, 0, 0)
for t in table:
print(''.join(t))
잘못된 점이나 부족한 점 지적해주시면 감사하겠습니다
728x90
'algorithm > 백준알고리즘' 카테고리의 다른 글
[백준알고리즘] 1517번: 버블 소트 -Python (0) | 2020.03.04 |
---|---|
[백준알고리즘] 2448번: 별 찍기 - 11 -Python (0) | 2020.03.04 |
[백준알고리즘] 11729번: 하노이 탑 이동 순서 -Python (0) | 2020.03.03 |
[백준알고리즘] 11728번: 배열 합치기 -Python (0) | 2020.03.03 |
[백준알고리즘] 10815번: 숫자 카드 -Python (0) | 2020.03.02 |