본문 바로가기

알고리즘

백준 2447번 별찍기 - 10

728x90

백준 2447번 별찍기 - 10

 

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

 

2447번: 별 찍기 - 10

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

www.acmicpc.net

 

 

풀이

 

행 index 를 3으로 나눴을 때 나머지가 1이면서 열 index 를 3으로 나눴을 때 나머지가 1인 경우에만 빈칸으로 출력하면 위와 같이 찍힐 것이다.

 

하지만, 규칙에서는 행 index 3,4,5 와 열 index 3,4,5 일 때 빈칸이어야한다.

3분할로 자꾸 쪼개지는 느낌의 규칙!

 

index를 3으로 나눠봤다.

그랬더니  행 index 를 3으로 나눴을 때 나머지가 1이면서 열 index 를 3으로 나눴을 때 나머지가 1인 경우에만 빈칸으로 출력하는 규칙이 적용 가능해졌다.

 

예외처리 후, 각 인덱스가 0, 0 이면 별표 출력!

만약 0,0도 아니고 3으로 나눴을 때 나머지가 1,1이 아니면 index를 3으로 나눠주는 작업을 반복하면 된다.

 

나의 코드

N = int(input())

# N = 27

def print_star(r, c):
    if r % 3 == 1 and c % 3 == 1:
        print(' ', end='')
        return
    if r == 0 and c == 0:
        print('*', end ='')
        return
    print_star(r // 3, c // 3)

for r in range(N):
    for c in range(N):
        print_star(r, c)
    print()