본문 바로가기
알고리즘 풀이/백준

[백준 2448] 별 찍기 - 11 (python)

by char_lie 2023. 4. 27.
반응형

https://www.acmicpc.net/problem/2448

 

2448번: 별 찍기 - 11

첫째 줄에 N이 주어진다. N은 항상 3×2k 수이다. (3, 6, 12, 24, 48, ...) (0 ≤ k ≤ 10, k는 정수)

www.acmicpc.net

별 찍기 - 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))
반응형

댓글