Problem From.
https://leetcode.com/problems/minimum-genetic-mutation/
오늘 문제는 간단한 BFS 문제였다.
start 로 주어진 여덟자리의 글자에서 한글자씩 바꿔가면서 end 에 도달할 수 있는 가장 적은 방법의 수를 구하는 문제였는데, 이때 바뀌는 글자는 모두 bank 안에 있어야 했다.
start 부터 큐에 넣고 BFS 를 시작하여, bank 안의 원소와 같으면 큐에 넣어주고 end 와 같은 글자가 나오면 리턴시키는 방식으로 코드를 만들었다.
class Solution {
fun minMutation(start: String, end: String, bank: Array<String>): Int {
val queue : Queue<Pair<String, Int>> = LinkedList()
val visited = BooleanArray(bank.size){ false }
queue.add(Pair(start, 0))
while(queue.isNotEmpty()) {
val gene = queue.poll()
val mutate = gene.first
val mutationCnt = gene.second
if(mutate == end) return mutationCnt
bank.forEachIndexed { i, saved ->
if(!visited[i] && isOneDiff(mutate, saved)) {
visited[i] = true
queue.add(Pair(saved, mutationCnt + 1))
}
}
}
return -1
}
private fun isOneDiff(one : String, two : String) : Boolean {
var cnt = 0
one.forEachIndexed { i, s ->
if(s != two[i]) cnt++
}
return if(cnt == 1) true else false
}
}