2447번 : 별 찍기 10 - Python

FriOct·2023년 4월 23일
0

PS

목록 보기
79/108

문제

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

풀이

nn 배열을 선언한다음 9개의 구간으로 나눈다. 북서, 북, 북동, 서, center, 동, 남서, 남, 남동 이렇게 9개 구간으로 나누어서 들어간다. 그러다 1칸을 보개 될 경우 을 입력한다. 여기서 center는 아예 보지 않는 것으로 *을 입력하지 않는다.

코드

from sys import stdin
input = stdin.readline

def solve(arr, x, y, n):

    if n == 1: #1칸을 바라볼때
        arr[y][x] = '*'
        return
    
    next = n//3

    solve(arr, x + (next*0),y + (next*0),next) #북서
    solve(arr, x + (next*1),y + (next*0),next) #북
    solve(arr, x + (next*2),y + (next*0),next) #북동

    solve(arr, x + (next*0),y + (next*1),next) #서
    #solve(arr, x + (next*1),y + (next*1),next)#center
    solve(arr, x + (next*2),y + (next*1),next) #동

    solve(arr, x + (next*0),y + (next*2),next) #남서
    solve(arr, x + (next*1),y + (next*2),next) #남
    solve(arr, x + (next*2),y + (next*2),next) #남동

N = int(input())
# 출력 결과의 틀을 만들어둔다.
arr = [[' ' for _ in range(N)] for _ in range(N)]

solve(arr, 0,0,N)

for i in arr:
    for j in i:
        print(j, end='')
    print()

다른 풀이

n에 따라 배열을 늘려버리는 방법
해당 자리가 *인지 공백인지 판단하는 방법

profile
꿈 많은 개발자

0개의 댓글