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

[백준 2447] 별 찍기 - 10 (python)

by char_lie 2023. 2. 22.
반응형

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

 

2447번: 별 찍기 - 10

재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이

www.acmicpc.net

별 찍기 - 10 문제

재귀를 활용하여 별을 반복해서 찍어 출력과 같게 모양을 만들어주는 문제

100% 내 생각으로 풀었는가?
→△

전부 참고한건 아니고 힌트를 좀 받아서 해결한 문제

내가 푼 정답 코드

def recur(n):
    if n == 1:
        return ['*']
    star = recur(n//3)

    stars = []
    for i in star:
        stars.append(i*3)
    for j in star:
        stars.append(j+' '*(n//3)+j)
    for k in star:
        stars.append(k*3)

    return stars


N = int(input())
print('\n'.join(recur(N)))

생각보다 간단하게 접근하면 쉽게 해결할 수 있는 문제였다. 재귀를 활용하면 되고, 3일때 출력과 같은 모양으로 같은자리에 반복해서 넣어준다고 생각하면 해결할 수 있었다.

먼저 3의 제곱 단위로 주어지고 점점 줄어드는 형태이므로 n이 1일 때 제귀 종료 조건을 넣어주었다.

그러고 stars를 리스트로 만들어 출력과 같은 모양을 만들기 위해 지정을 해주었다. 처음에 풀때는 가운데 빈 뚫린 칸이 원하는 만큼 나오지 않았는데 가운데 공란도 사이즈를 그만큼 맞춰줄 필요가 있던 것이었다.

저부분만 맞춰준다면 재귀를 이용하여 찍어낼 수 있던 문제!


느낀점

이 문제를 풀면서 아직 내가 재귀에 대한 개념이 많이 얕다는 점을 배웠다. 재귀의 개념에 대해선 이해하고 있지만, 많이 활용하지 않았기도 하고 복잡하단 이유로 재귀를 피하려고 많이 한거 같다.

알고리즘 풀이에서 중요한 파트 중 하나가 재귀인데 부족한 점을 느끼고 더 집중적으로 볼 필요가 있다고 배우게 해준 문제가 아닌가 싶다.

반응형

댓글