백준 2448번 별 찍기 - 11

Hyun·2024년 1월 9일
0

코딩테스트

목록 보기
56/66

https://www.acmicpc.net/problem/2448
실패이유: 구현실패

def star(x, y, height):     # 가장 위의 꼭지점 좌표가 입력으로 들어온다.
    if height == 3:             # 높이가 3인 경우 제일 작은 삼각형
        board[y][x] = True                                  # 첫 번째 줄
        board[y + 1][x - 1] = board[y + 1][x + 1] = True    # 두 번째 줄
        for i in range(x - 2, x + 3):                       # 세 번재 줄
            board[y + 2][i] = True

        return

    star(x, y, height // 2)                                 # 큰 삼각형의 윗 삼각형
    star(x - height // 2, y + height // 2, height // 2)     # 큰 삼각형의 왼쪽 아래 삼각형
    star(x + height // 2, y + height // 2, height // 2)     # 큰 삼각형의 오른쪽 아래 삼각형


n = int(input())
board = [[False] * (n * 2 - 1) for _ in range(n)]
star(n - 1, 0, n)

for y in range(n):
    for x in range(2 * n - 1):
        if board[y][x]:
            print('*', end='')
        else:
            print(' ', end='')
    print()
  • 입력값 n이 높이가 되고, 입력값 n * 2 - 1이 너비가 된다.
  • star 재귀 함수에 매개 변수로 전달되는 x, y 좌표는 삼각형의 맨 위 꼭지점 좌표이다.
  • 삼각형의 높이가 3 보다 큰 경우, 높이를 반으로 줄여 작은 삼각형으로 분할한다.
    • 위쪽 삼각형
    • 왼쪽 아래 삼각형
    • 오른쪽 아래 삼각형
  • 삼각형의 높이가 3인 경우, 더 이상 쪼갤 수 없으므로 삼각형을 채운다.

출처: 알고리즘 중급 1/3 강의
https://code.plus/course/43

노력의 천재 님 블로그
https://transferhwang.tistory.com/316

0개의 댓글

관련 채용 정보