-
[프로그래머스][Kotlin]단어변환프로그래머스 2023. 2. 9. 16:15728x90
class Solution { var changeCount : Int = 51 fun solution(begin: String, target: String, words: Array<String>): Int { var answer = 0 var visted = mutableMapOf<String,Boolean>() var vistedMap = mutableMapOf<String,MutableList<String>>() // 단어별 변환 될 수 있는 단어들 if(!words.contains(target)) { return 0 } var tempList = mutableListOf<String>() visted.put(begin,false) words.forEach{ var count = 0 for(i in 0 .. it.length-1){ if(begin[i] == it[i]) count++ } if(count == it.length-1){ tempList.add(it) } visted.put(it,true) } vistedMap.put(begin,tempList) for(i in 0 .. words.size-1){ var checkList = mutableListOf<String>() for(j in 0 .. words.size-1){ if(i == j){ continue } else{ var count = 0 for(k in 0 .. words[i].length-1){ if(words[i][k] == words[j][k]) count++ } if(count == words[i].length-1){ checkList.add(words[j]) } } } vistedMap.put(words[i],checkList) } for(i in 0 until vistedMap[begin]!!.size){ dfs(vistedMap[begin]!![i],visted,vistedMap,1,target) } return changeCount } fun dfs(begin: String, visted: MutableMap<String,Boolean>, vistedMap: MutableMap<String,MutableList<String>>, count: Int, target:String){ var checkvisted = visted checkvisted.put(begin,false) // 방문표시 if(begin == target){ if(changeCount > count){ changeCount = count } return } var checkList = vistedMap.get(begin) if(checkList!!.isEmpty()) return for(i in 0 .. checkList.size-1){ if(checkvisted[checkList[i]]!!){ dfs(checkList[i],checkvisted,vistedMap,count+1,target) checkvisted[checkList[i]] = true } } } }
확실히 DFS 알고리즘 문제들을 작성 할 수록 어떻게 작성하고 기초자료를 어떻게 만들어 놔야 계산하기 편하겠다라는것이 조금씩 보이기 시작하였습니다.
작성하여 통과하고나서 보니 LV3 였다는것을 알게 되었습니다. 아무래도 특정 알고리즘때문에 LV가 올라간게 아닐까? 라는 생각이 들며 추가적으로 든 생각은 다른 DFS문제와 비슷하지만 words내 값별로 Boolean 값을 지정하여 계산한다는 점 이였던 것 같습니다.
하지만 제가 풀던 방식에서 큰 차이는 못느꼈던것 같습니다.
추후 다른 알고리즘을 알게 되거나 실력 향상이 되어 새롭게 작성할 수 있는 실력이 된다면 다시 작성할 수 있도록 하겠습니다.
'프로그래머스' 카테고리의 다른 글
[프로그래머스][Kotlin] 디펜스 게임 (0) 2023.02.13 [프로그래머스][Kotlin] 가장 큰 수 (0) 2023.02.10 [프로그래머스][Summer/Winter Coding(~2018)][Kotlin]배달 (0) 2023.02.08 [프로그래머스][Kotlin] 둘만의 암호 (0) 2023.02.04 [프로그래머스][Kotlin] 네트워크 (0) 2023.02.01