코드

n = int(input())

# 일단 기본적으로 우리가 그리고자 하는
# 패턴을 줄별로 리스트에 담음
dot = ['***', '* *', '***']

def drawing_star(n):
    if n == 3:
        return dot
    
    next_draw = drawing_star(n//3)
    stars = []
    
    # i : 그리고자 하는 패턴 => dot
    
    for i in next_draw:
        stars.append(i * 3)
        
    # 가운데가 비어있어야 하므로
    # 이 반복문만 i를 3개 뽑는게 아닌 2번만 뽑고
    # 가운데를 n//3 만큼 여백을 추가함
    for i in next_draw:
        stars.append(i + ' ' * (n//3) + i)
    
    for i in next_draw:
        stars.append(i * 3)
        
    return stars

print('\n'.join(drawing_star(n)))

문제 해설

재귀 함수를 이용한 별 찍기 문제.

사실 이 문제를 정말 오랫동안 해결하지 못하여 결국 구글링을 하여서 문제를 해결하였다. 재귀적인 호출은 정말 이해하는 과정이 까다로운 것 같다.

문제에서 가장 연상하지 못한 부분은 바로 아래의 dot 리스트 생성이다.

# 일단 기본적으로 우리가 그리고자 하는
# 패턴을 줄별로 리스트에 담음
dot = ['***', '* *', '***']

최소 입력되는 N의 값은 3이며, 3이 입력되는 경우 나오는 패턴이 최종 출력 결과를 이루는 기본 패턴이 된다. 따라서 그 기본 패턴을 한 줄씩 리스트에 저장하여 활용한다는 발상을 하지 못했다.

일단 패턴으로 쓸 리스트를 만들고 나면 N의 값을 계속 3으로 나눠주면서 최종적으로 3이 될 때까지 재귀적으로 호출하여 최종적으로 stars 리스트에 만들어지는 모든 패턴들을 넣어주고 반환한다. 그리고 최종적으로 반환된 stars 리스트를 한 줄씩 출력해주면 정답이다.

재귀 문제는 정말 많은 연습이 필요한 것 같다. 기본적인 센스와 많은 경험치가 조화를 이루어야만 문제에 접근이라도 할 수 있다는 것을 뼈저리게 깨닫는다 ㅠㅠ 열심히 많은 문제를 접해봐야겠다!!!

댓글남기기