반응형
https://www.acmicpc.net/problem/2448
별 찍기 - 11 문제
별을 규칙에 맞게 찍도록 구현하는 문제
재귀를 활용하여 해결할 수 있었다.
📌문제 접근 포인트
1. 별을 찍어보자. 별은 가운데가 비어있는 삼각형 모양으로 찍혀나간다.
2. 3*2^n꼴로 숫자가 주어진다. 즉 n=3 일 때 해당하는 모양을 만들어주고 n/2를 진행하면서 재귀를 통해 탐색해 주자.
3. 왼쪽 오른쪽 공백 구성에 맞게 출력해 주면 완성
⚙️ 내가 푼 정답 코드 1
# 위와 아래로 나눠서 별을 늘려나가는 방식
def star(n):
if n == 3:
return [' * ',' * * ','*****']
stars = star(n//2)
x = [' ' * (n//2) + i + ' ' * (n//2) for i in stars] # 머리부분 삼각형
y = [i + ' ' + i for i in stars] # 몸부분 삼각형 3개 영역
return x+y
import sys
N = int(sys.stdin.readline())
result = star(N)
print('\n'.join(result))
⚙️ 내가 푼 정답 코드 2
def stars(y, x, n):
if n == 3:
# 첫번째 줄 3번째 칸(한가운데(N-1)) = *
star[y][x] = '*'
# 두번째 줄 2번째, 4번째 칸 = * (가운데 뚫린 별)
star[y+1][x-1] = '*'
star[y+1][x+1] = '*'
# 세번째 줄 5개의 *로 채우기
star[y+2][x-2] ='*'
star[y+2][x-1] ='*'
star[y+2][x] ='*'
star[y+2][x+1] ='*'
star[y+2][x+2] ='*'
else :
stars(y, x, n//2)
stars(y + n//2 , x + n//2 , n//2) # 오른쪽 모양
stars(y + n//2 , x - n//2 , n//2) # 왼쪽 모양
import sys
N = int(sys.stdin.readline())
# 예제 마지막줄보면 ***** ***** ***** ... 로 별 5칸+ 공백 1칸으로 6칸 * 8개로 지정 -> 2*N개의 공백
star = [[' '] * (2*N) for _ in range(N)]
stars(0,N-1,N)
for i in star:
print(''.join(i))
반응형
'알고리즘 풀이 > 백준' 카테고리의 다른 글
[백준 14890] 경사로(python) (0) | 2023.04.29 |
---|---|
[백준 21610] 마법사 상어와 비바라기 (python) (0) | 2023.04.29 |
[백준 14468] 소가 길을 건너간 이유 2 (python) (0) | 2023.04.27 |
[백준 14667] 소가 길을 건너간 이유 1 (python) (0) | 2023.04.27 |
[백준 15685] 드래곤 커브(python) (0) | 2023.04.25 |
댓글