[백준] 7562번: 나이트의 이동 - kotlin

kldaji·2021년 11월 14일
1

백준문제풀이

목록 보기
35/35
post-custom-banner

문제

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

풀이

  • 방향만 추가된 BFS 문제이다.
import java.util.*

fun main() {
    val br = System.`in`.bufferedReader()
    val bw = System.out.bufferedWriter()
    val t = br.readLine().toInt()
    val dx = listOf(-2, -1, 1, 2, 2, 1, -1, -2)
    val dy = listOf(1, 2, 2, 1, -1, -2, -2, -1)
    repeat(t) {
        val n = br.readLine().toInt()
        val (srcX, srcY) = br.readLine().split(" ").map { it.toInt() }
        val (destX, destY) = br.readLine().split(" ").map { it.toInt() }
        val queue: Queue<Triple<Int, Int, Int>> = LinkedList()
        val visited = Array(n) { Array(n) { false } }
        queue.add(Triple(srcX, srcY, 0))
        visited[srcY][srcX] = true
        while (queue.isNotEmpty()) {
            val (currX, currY, cnt) = queue.poll()
            if (currX == destX && currY == destY) {
                bw.write("$cnt\n")
                break
            }
            for (i in 0 until 8) {
                val nx = currX + dx[i]
                val ny = currY + dy[i]
                if (nx in 0 until n && ny in 0 until n && !visited[ny][nx]) {
                    queue.add(Triple(nx, ny, cnt + 1))
                    visited[ny][nx] = true
                }
            }
        }
    }
    br.close()
    bw.close()
}

더 좋은 방법 있으면 댓글 달아주세요!!!

profile
다양한 관점에서 다양한 방법으로 문제 해결을 지향하는 안드로이드 개발자 입니다.
post-custom-banner

0개의 댓글