문제
풀이
입력받은 배열의 모든 지점에서 출발하는 DFS(깊이 우선 탐색)를 수행하고 각 DFS에서는 현재 위치에서 상하좌우도 이동하여 새로운 숫자를 만들어 나간다.
DFS의 깊이가 6이 되면 탐색을 종료하고, 탐색으로 찾은 6자리 숫자를 HashSet에 저장한다. HashSet은 중복을 제외하기 기 때문에 HashSet의 크기는 탐색으로 발견 가능한 모든 수의 개수가 된다.
코드
fun main() {
val br = System.`in`.bufferedReader()
val bw = System.out.bufferedWriter()
val arr = Array(5) { br.readLine().split(' ').map { it.toInt() } }
val set = HashSet<String>()
val dx = arrayOf(1, 0, -1, 0)
val dy = arrayOf(0, 1, 0, -1)
fun dfs(depth: Int, line: String, x:Int, y: Int) {
if(depth == 6) {
set.add(line)
return
}
for(i in 0 until 4) {
val nx = x + dx[i]
val ny = y + dy[i]
if(nx < 0 || nx >= 5 || ny < 0 || ny >= 5) continue
dfs(depth+1, line + arr[nx][ny], nx, ny)
}
}
repeat(5) { i ->
repeat(5) { j ->
dfs(1, "${arr[i][j]}", i, j)
}
}
bw.write("${set.size}")
bw.flush()
bw.close()
br.close()
}
'알고리즘 > Baekjoon' 카테고리의 다른 글
[백준] 16194번: 카드 구매하기 2 - Kotlin[코틀린] (0) | 2024.03.03 |
---|---|
[백준] 11053번: 카드 구매하기 - Kotlin[코틀린] (0) | 2024.03.03 |
[백준] 1914번: 하노이 탑 - Kotlin[코틀린] (0) | 2024.03.01 |
[백준] 1783번: 병든 나이트 - Kotlin[코틀린] (0) | 2024.02.29 |
[백준] 1080번: 행렬 - Kotlin[코틀린] (0) | 2024.02.28 |