코딩일지/python 백준 알고리즘

python 백준 알고리즘 2447번: 별 찍기 - 10

야언 2022. 9. 19. 18:03

N의 패턴 -> ' '으로 채워진 가운데의 (N/3) x (N/3)의 정사각형을 크기 (N/3)의 패턴으로 둘러싼 형태.

결국 재귀를 돌면서 N은 최소단위는 3이 되고, 탈출경로로 N=3일때의 패턴을 만들어 리턴.

 

 

** 재귀함수 최대깊이 설정

import sys
sys.setrecursionlimit(10**6)

파이썬의 재귀함수 기본 최대횟수가 1000회로 작아 대부분의 코딩테스트 문제에 적용시켜줘야 수월하다

 

 

**  '\n'.join

 

'구분자(이 경우 줄넘김)'.join(리스트)를 이용하면 리스트의 값과 값 사이에 '구분자'에 들어온 구분자를 넣어서 하나의 문자열로 합친다.

 

 

** input 과 sys.studin.readline

 

둘은 기능상 큰 차이가 없으나 속도차이가 크다. 백준은 입력값을 받아서 문제를 푸는 구조기 때문에 우측을 자주 사용해보도록 합시다

 

 

내 제출

import sys
sys.setrecursionlimit(10**6)  # 재귀함수 최대깊이 설정

def star(n):
    if n == 3:  # 탈출경로 설정
        return ['***','* *','***']

    arr = star(n//3)
    stars = []

    for i in arr:
        stars.append(i*3)

    for i in arr:
        stars.append(i+' '*(n//3)+i)

    for i in arr:
        stars.append(i*3)

    return stars
    
N = int(sys.stdin.readline().strip())
print('\n'.join(star(N)))