티스토리 뷰
https://www.acmicpc.net/problem/10994
1. 접근 방식
- 가장 바깥쪽 그림을 그리는 함수를 만들자.
이 문제에서 별의 패턴은 사각형이 n번 그려진다는 것이다. 사각형 각 변의 길이는 length = 1 + (4 * (n - 1) )이다. 따라서 먼저 빈 도화지 역할로, 행과 열이 length 크기인 빈 리스트 table를 생성한다.
처음 별표(*)를 그리기 시작하는 위치(x, y)는 (0, 0)이고, 사각형의 길이는 length이다. 그림 그리는 논리는 이러하다.
① 사각형 위쪽과 아래쪽은 모두 *를 채워넣는다. 즉, table의 첫 번째 행과 마지막 행은 모든 열을 순회하면서 *로 초기화한다.
② 사각형 왼쪽과 오른쪽은 한 칸씩 건너뛰어가며 *를 그려준다. 즉, table의 첫 번째 열과 마지막 열은 두 행마다 한 번씩 *로 초기화한다. 한 행을 뛰어넘는 것은 행의 순회 step을 2로 설정하면 된다.
- 위 함수를 재귀함수로 수정하자.
n = 3이라면 처음에 그려지는 사각형은 length는 9이고, (0, 0)부터 그려진다. 그 다음에는 n = 2일 때의 사각형이 그려져야 하는데, 그 위치는 (2, 2)이고 length는 5이다. 따라서 다음에 이 함수를 호출할 때는 (x, y)는 기존 x, y에 + 2한 값을 넣고, length는 -2를 해준다. length에 -4해서 5로 하지 않고, -2를 하는 이유는 2부터 7까지의 거리가 5이기 때문이다.
종료 조건은 length가 1일 때이다.
2. 정답 코드
def draw(x, y, size):
if size <= 1:
table[x][y] = '*'
return
for j in range(y, size):
table[x][j] = '*'
table[size-1][j] = '*'
for i in range(x, size):
table[i][y] = '*'
table[i][size-1] = '*'
draw(x + 2, y + 2, size - 2)
def print_result():
for t in table:
print(''.join(t))
# main
n = int(input())
length = 1 + (4 * (n-1))
table = [[' '] * length for _ in range(length)]
draw(0, 0, length)
print_result()
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준] 1927 최소 힙 파이썬 정답 코드 (0) | 2023.08.08 |
---|---|
[백준] 11279번 최대 힙 파이썬 정답 코드 (0) | 2023.08.08 |
[백준] 1913번 달팽이 파이썬 정답 코드 (0) | 2023.06.22 |
[백준] 18870번 좌표 압축 파이썬 정답 코드 (0) | 2023.06.21 |
[백준] 1431번 시리얼 번호 파이썬 정답 코드 (0) | 2023.06.21 |