Daily LeetCode Challenge - 433. Minimum Genetic Mutation

Min Young Kim·2022년 11월 2일
0

algorithm

목록 보기
23/198

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
    }
    
}
profile
길을 찾는 개발자

0개의 댓글