Post

[백준/코틀린] 2448번: 별 찍기 - 11

골드 4

링크

2448번: 별 찍기 - 11

풀이

높이 h인 삼각형은 높이 h/2인 삼각형 3개로 구성됩니다.

  • 위쪽: (y, x + h/2)
  • 아래 왼쪽: (y + h/2, x)
  • 아래 오른쪽: (y + h/2, x + h)

이 규칙에 따라 삼각형을 3개의 하위 삼각형으로 분할해 재귀적으로 별을 찍습니다.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
lateinit var canvas: Array<CharArray>
val BASE = arrayOf(
    "  *  ",
    " * * ",
    "*****",
)

fun draw(h: Int, y: Int, x: Int) {
    if (h == 3) return run {
        for (i in 0 until 3) {
            for (j in 0 until 5) {
                canvas[y + i][x + j] = BASE[i][j]
            }
        }
    }

    val m = h / 2

    draw(m, y, x + m)
    draw(m, y + m, x)
    draw(m, y + m, x + h)
}

fun main() {
    val n = readln().toInt()
    canvas = Array(n) { CharArray(2 * n - 1) { ' ' } }

    draw(n, 0, 0)

    canvas.forEach { println(it.concatToString()) }
}

This post is licensed under CC BY 4.0 by the author.