[baekjoon] 2447

윤동환·2023년 2월 8일
0

Algorithm

목록 보기
47/54
post-thumbnail

별 찍기 - 10

문제 사이트

성공 코드

import sys
input=sys.stdin.readline

def Draw(N):
    if N == 1:
        return ["*"]
    patern = Draw(N // 3)
    
    board = []
    for p in patern:
        board.append(p * 3)
    for p in patern:
        board.append(p + " " * (N // 3) + p)
    for p in patern:
        board.append(p * 3)
    return board

N = int(input())
board = Draw(N)
print("\n".join(board))

의도

N의 값이 무엇이던 앞서 나온 결과물을 바탕으로 반복되므로 for in 문으로 앞서 나온 패턴을 그대로 복사하여 필요한 개수만큼 곱하여 append해주어 새로 할당한다.
즉, 오른쪽으로 3배증가 (p * 3)
아래 쪽으로 3배 증가 (for문이 3개)

고민했던 점

  • 2차 배열을 선언하여 중첩 for문으로 인덱스 조건을 주어 식별했다
    (i < N // 3 or i >= N - (N // 3)) or (j < N // 3 or j >= N - (N // 3))
    하지만 조건에 맞게 패턴을 그렸을 때
    	*** -> 123
    	* * -> 456
    	*** -> 789
    로 가정하여 보자면
    패턴이 1, 5 같은 부분만 패턴이 형성되고 2,3, 4, 6, 7, 8, 9는 형성되지 않았다.
    처음 부분과 제외부분만 적용이 되는 문제가 있었다.

    해결하기 위해 각 for문의 index를 곱해주며 계산하려했으나 종국엔 재귀가 아니라 for문으로 그리고있었다.
    재귀로 해결하고자 방법을 바꾸었으나 잘 되지 않아 다른 해결 방법을 참고했다.
    참고 블로그

profile
모르면 공부하고 알게되면 공유하는 개발자

0개의 댓글