728x90
출처: 2447번: 별 찍기 - 10 (acmicpc.net)
별 찍기 - 10 성공분류
시간제한 메모리 제한 제출 정답 맞은 사람 정답 비율
1 초 | 256 MB | 27523 | 14062 | 10246 | 50.945% |
문제
재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27,...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다.
크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 하나씩 있는 패턴이다.
*** * * ***
N이 3보다 클 경우, 크기 N의 패턴은 공백으로 채워진 가운데의 (N/3) ×(N/3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태이다. 예를 들어 크기 27의 패턴은 예제 출력 1과 같다.
입력
첫째 줄에 N이 주어진다. N은 3의 거듭제곱이다. 즉 어떤 정수 k에 대해 N=3k이며, 이때 1 ≤ k < 8이다.
[ 문제 설명 ]
이 문제의 이해의 첫 단추는 *를 채우고 지우는 방식이 아니라 비운 상태에서 *를 채우는 방식으로 진행한다는 것입니다.
그림으로 설명하겠습니다.
[ 코드 ]
def starts(n):
if n == 3:
drawing[0][:3] = drawing[2][:3] = [1] * 3
drawing[1][:3] = [1, 0, 1]
else:
t = n // 3
starts(n // 3)
for q in range(3):
for w in range(3):
if q == 1 and w == 1:
continue
for v in range(t):
drawing[t * q + v][t * w: t * (w + 1)] = drawing[v][:t]
n = int(input())
drawing = [[0 for i in range(n)] for i in range(n)]
starts(n)
for i in drawing:
for j in i:
if j:
print('*', end='')
else:
print(' ', end='')
print()
후기
그림을 잘 이해하시고, 혹은 이해가 애매하다고 하셔도
보신 후에 코드를 보시면 더 빠르게 이해가 되실 겁니다.
728x90
'백준 코딩 테스트' 카테고리의 다른 글
백준 - 1517번 버블 소트 (0) | 2021.03.08 |
---|---|
백준 2448번 - 별찍기(11) (0) | 2021.03.08 |
백준 1992번 - 쿼드트리 (0) | 2021.03.03 |
백준 11729번 - 하노이탑 이동순서 (0) | 2021.03.03 |
백준 20953번 - 고고학자 예린 (0) | 2021.03.01 |