몰?.루();

백준 14499번 코틀린 본문

카테고리 없음

백준 14499번 코틀린

toonraon 2022. 10. 26. 20:03

문제에서 주사위 위치를 (x, y)로 나타낸다고 했는데

사실 x와 y가 반대이다...

 

즉 x가 row이고 y가 column이다;;

fun main() {
    val (n, m, y, x, k) = readln().split(" ").map { it.toInt() }

    val map = Array<IntArray>(n) { IntArray(m) }

    repeat(n) {
        map[it] = readln().split(" ").map { it.toInt() }.toIntArray()
    }

    val cmd = readln().split(" ").map { it.toInt() }

    val dice = Dice()

    var r = y
    var c = x
    val dr = intArrayOf(0, 0, 0, -1, 1)
    val dc = intArrayOf(0, 1, -1, 0, 0)
    for (a in cmd) {
        // 동쪽은 1, 서쪽은 2, 북쪽은 3, 남쪽은 4
        val nextR = r + dr[a]
        val nextC = c + dc[a]

        if (nextR in 0 until n && nextC in 0 until m) {
            dice.move(a, map, nextR, nextC)
            r = nextR
            c = nextC
        }
    }
}

data class Dice(var top: Int = 0, var bottom: Int = 0, var left: Int = 0, var right: Int = 0, var front: Int = 0, var back: Int = 0) {
    fun move(direction: Int, map: Array<IntArray>, r: Int, c: Int) {
        // 동쪽은 1, 서쪽은 2, 북쪽은 3, 남쪽은 4
        when(direction) {
            1 -> {
                val temp = left
                left = bottom
                bottom = right
                right = top
                top = temp
            }
            2 -> {
                val temp = right
                right = bottom
                bottom = left
                left = top
                top = temp
            }
            3 -> {
                val temp = front
                front = bottom
                bottom = back
                back = top
                top = temp
            }
            4 -> {
                val temp = back
                back = bottom
                bottom = front
                front = top
                top = temp
            }
        }

        if (map[r][c] == 0) {
            map[r][c] = bottom
        } else {
            bottom = map[r][c]
            map[r][c] = 0
        }

        println(top)
    }
}

 

Comments