티스토리 뷰
https://www.acmicpc.net/problem/10994
👩💻문제 이해
재귀함수를 이용한 문제는 패턴을 파악하는게 가장 중요하다.
하지만 아직 문제를 보자마자 패턴을 파악하는게 쉽진 않다.
나름대로 재귀함수 문제를 풀 때 로직을 조금 더 쉽게 알아차릴 수 있는 방법을 생각해봤는데,
대부분의 재귀함수는 정의된 함수의 변수를 n이라고 할 때 (n-1)을 변수로 가지는 함수를 호출한다.
따라서 n 일때와 n-1 일 때의 출력을 비교하며 로직을 찾으면 좀 더 쉽게 찾을 수 있을 것이다.
n이 4일 때의 출력을 예로 들어보자면
가장 바깥 쪽의 라인(n) -> 행과 열이 (4*n -3)개 -> '*' 출력
안쪽 라인 (n-1) -> 가장 바깥 쪽 라인과 비교했을 때 인덱스를 오른쪽으로 +2, 아래쪽으로 +2 한 곳 부터 똑같이 (4*n-3)개의 '*' 가 출력 된다.
그리고 이 과정이 n=1이 될 때까지 반복되고,
n이 1일 경우에는 정중앙에만 '*'가 출력된다.
👩💻재귀함수를 사용한 코드 : 성공🌈
n = int(input())
arr = [[' '] * (4*n - 3) for _ in range(4*n - 3)]
def star19(num, idx):
if num == 1:
arr[idx][idx] = '*'
return;
l = 4 * num - 3
for i in range(idx, idx+l):
arr[idx][i] = '*'
arr[idx+l-1][i] = '*'
arr[i][idx] = '*'
arr[i][idx+l-1] = '*'
return star19(num-1, idx+2)
star19(n,0)
for i in range(4*n-3):
for j in range(4*n-3):
print(arr[i][j], end='')
print()
n = int(input())
arr = [[' '] * (4*n - 3) for _ in range(4*n - 3)]
# 행과 열이 (4*n - 3)인 2차원 배열을 만들어 준다.
def star19(num, idx):
if num == 1:
arr[idx][idx] = '*'
return;
# input() 값이 1일 때 배열 정중앙에 '*'을 출력
l = 4 * num - 3
for i in range(idx, idx+l):
# 배열 테두리 위치에 '*' 출력
# 위아래
arr[idx][i] = '*'
arr[idx+l-1][i] = '*'
# 양옆
arr[i][idx] = '*'
arr[i][idx+l-1] = '*'
return star19(num-1, idx+2)
# 바깥쪽 -> 안쪽
# idx+2를 하는 이유는 위에서 설명했듯이 n값이 하나 줄어들수록 오른쪽으로, 밑으로 2칸 옮겨진 위치부터 '*'이 출력되기 때문
star19(n,0)
for i in range(4*n-3):
for j in range(4*n-3):
print(arr[i][j], end='')
print()
✨Point✨
2차원 배열 쉽게 만들기
arr = [[' '] * n for _ in range(n)]]
재귀함수 로직 찾기 중요
'🦖 Programming > Python' 카테고리의 다른 글
[Python] 백준 알고리즘 4889번 : 안정적인 문자열 (0) | 2022.09.23 |
---|---|
[Python] 백준 알고리즘 1874번 : 스택 수열 (1) | 2022.09.23 |
[Python] ⭐️백준 알고리즘 11729번 : 하노이 탑 이동 순서 (0) | 2022.09.20 |
[Python] 백준 알고리즘 2805번 : 나무 자르기 (0) | 2022.09.20 |
[Python] 백준 알고리즘 2776번 : 암기왕 (1) | 2022.09.20 |
댓글