-- 예전 기록/BOJ

[ BOJ ] 10997 : 별 찍기 - 22 ( SILVER 2 ) / Python

rejo 2024. 1. 29. 11:00

문제

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

입력

첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

출력

첫째 줄부터 차례대로 별을 출력한다.

풀이 과정

재귀 태그가 달려있긴 하지만, 토네이도 만들기를 구현해도 AC를 받는다!

import sys
input = sys.stdin.readline

n = int(input().rstrip()) * 4 - 3

if n == 1: print('*')
else:
    arr = [['*' for _ in range(n)] for _ in range(n+2)]

    now = [1, n - 1]
    row = [0, 1, 0, -1]
    col = [-1, 0, 1, 0]
    dir = 0
    cnt = 0

    while True:
        arr[now[0]][now[1]] = ' '
        if (dir == 0 and (now[1] == 1 or arr[now[0]][now[1] - 2] == ' ')) or (dir == 1 and (now[0] == n or arr[now[0] + 2][now[1]] == ' ')) or (dir == 2 and (now[1] == n - 2 or arr[now[0]][now[1] + 2] == ' ')) or (dir == 3 and arr[now[0] - 2][now[1]] == ' '):
            dir = (dir + 1) % 4
            cnt += 1
        else: 
            cnt = 0
            now[0] += row[dir]
            now[1] += col[dir]

        if cnt == 5: break

    for i in range(n+2):
        if i == 1: print('*')
        else:
            for j in range(n):
                print(arr[i][j], end='')
            print()