Algorithm/프로그래머스
Swift) 프로그래머스 단어 변환 - Lv. 3
콩벌레 개발자
2024. 3. 22. 23:03
https://school.programmers.co.kr/learn/courses/30/lessons/43163
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이: bfs로 주어진 문자 배열과 변환해야 하는 문자를 Array로 분리시켜서 서로 틀린 부분을 비교. 틀린 부분이 2개 이상이면 큐에 넣지 않는 방식으로 문제를 풀이
import Foundation
struct Word {
let count: Int
let word: String
}
func checkCanConvert(_ start: String, _ target: String) -> Bool {
let startArr = Array(start)
let targetArr = Array(target)
var count = 0
for i in 0..<startArr.count {
if count >= 2 {
return false
}
if startArr[i] != targetArr[i] {
count += 1
}
}
return count < 2
}
func solution(_ begin:String, _ target:String, _ words:[String]) -> Int {
var queue: [Word] = [.init(count: 0, word: begin)]
var visitedWord: [String] = []
while !queue.isEmpty {
let popWord = queue.removeFirst()
if popWord.word == target {
return popWord.count
}
for word in words {
if visitedWord.contains(word) {
continue
}
if checkCanConvert(popWord.word , word) {
queue.append(.init(count: popWord.count+1, word: word))
visitedWord.append(word)
}
}
}
return 0
}