프로그래머스 - 단어 변환

Seoyoung Lee·2023년 3월 31일
0

알고리즘

목록 보기
104/104
post-thumbnail
import Foundation

func solution(_ begin:String, _ target:String, _ words:[String]) -> Int {    
    if !words.contains(target) {
        return 0
    }
    
    var answer = 500
    var visited = Set<String>()
    
    func isClose(_ string1: String, _ string2: String) -> Bool {        
        let a = Array(string1), b = Array(string2)
        let diffCount = (0..<string1.count).filter {a[$0] != b[$0] }.count
        
        return diffCount == 1
    }
    
    func dfs(_ now: String, _ count: Int) {
        visited.insert(now)
                
        for next in words {
            if isClose(now, next) && !visited.contains(next) {
                if next == target {
                    answer = min(answer, count)
                    return
                }
                dfs(next, count + 1)
            }
        }
    }
    
    dfs(begin, 1)
    
    return answer
}
  • DFS를 사용해서 현재 단어와 한 글자만 다른 단어를 계속해서 탐색하고, target 단어에 도달하면 탐색을 종료한다.
    • 단어의 길이와 개수의 수가 작기 때문에 완전 탐색을 이용해서 한 글자만 다른 단어들을 찾아도 된다.
  • 단어를 한 글자씩 쪼개서 탐색해야 할 줄 알고 고민했었는데.. 입력값의 크기가 작으면 완전 탐색을 사용해도 된다!! 까먹지 말자!!!
profile
나의 내일은 파래 🐳

0개의 댓글