
까다로운 재귀 문제다. 다만 푸는 방법을 파훼하면 급격히 쉬워지기에 그 방법을 알아보자.
우리의 목표는 피라미드 모양의 별을 보이는 패턴대로 찍는 것이다. 빈칸까지 붙어있으니 정말이지 어려워 보인다.
일단 출력 예시를 자세히 보면 빈칸이 앞에만 있는 것이 아니라 뒤에도 붙어있음을 생각해서 풀어야 한다. 이 때문에 PE(Print Error, 출력 형식 오류)가 생길 수 있으니 꼭 주의하자.
이 문제는 양 옆으로 붙은 빈칸이 있을 땐 굉장히 어려워 보이지만, 이 빈칸을 없애면 문제가 급격하게 쉬워진다.
# N == 3:
*
* *
*****
# N == 6:
*
* *
*****
* *
* * * *
***** *****
# N == 12:
*
* *
*****
* *
* * * *
***** *****
* *
* * * *
***** *****
* * * *
* * * * * * * *
***** ***** ***** *****
# N == 24:
*
* *
*****
* *
* * * *
***** *****
* *
* * * *
***** *****
* * * *
* * * * * * * *
***** ***** ***** *****
* *
* * * *
***** *****
* * * *
* * * * * * * *
***** ***** ***** *****
* * * *
* * * * * * * *
***** ***** ***** *****
* * * * * * * *
* * * * * * * * * * * * * * * *
***** ***** ***** ***** ***** ***** ***** *****
패턴이 바로 보이는 것을 알 수 있다!
일단 이 문제는 재귀를 해야하기 때문에 첫 항을 설정해줘야 하고, 이는
3 이후의 항들을
이를 코드로 그대로 옮기고, 마지막에 양 옆에 빈칸을 붙이면 이 문제를 풀게 된다.
import sys
def star_print(n):
if n == 3:
star.append('*')
star.append('* *')
star.append('*****')
return
else:
star_print(n//2)
temp_star = list()
for i in range(len(star)):
temp_star.append(star[i]+' '*(n-1-2*i)+star[i])
star.extend(temp_star)
if __name__ == '__main__':
N = int(sys.stdin.readline().rstrip())
star = list()
star_print(N)
for i in range(len(star)):
print(' '*(N-1-i) + star[i] + ' '*(N-1-i))
재귀 함수에서
여기서 iterator의 for문을 안전하게 쓰고자 temp라는 list에 추가될 별 문장들을 저장하고, 이를 기존 star라는 list에 extend를 하여 연장시키는 방법으로 접근했다. 마지막엔 빈칸을 문제 출력에 맞게 넣었다.
'Python > 백준 문제 풀이' 카테고리의 다른 글
[BOJ] 10252번 그리드 그래프 (0) | 2022.11.13 |
---|---|
[BOJ] 7977번 크리스 마틴 (0) | 2022.11.10 |
[BOJ] 15828번 Router (0) | 2022.10.23 |
[BOJ] 2981번 검문 (1) | 2022.10.08 |
[BOJ] 1002번 터렛 (0) | 2022.09.30 |
댓글