https://school.programmers.co.kr/learn/courses/30/lessons/43163
문제 풀이: 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
}
'Algorithm > 프로그래머스' 카테고리의 다른 글
Swift) 프로그래머스 섬 연결하기 - Lv. 3 (1) | 2024.03.23 |
---|---|
Swift) 프로그래머스 가장 먼 노드 - Lv. 3 (1) | 2024.03.23 |
Swift) 프로그래머스 네트워크 - Lv. 3 (0) | 2024.03.22 |
Swift) 프로그래머스 멀리뛰기 - Lv. 2 (0) | 2024.03.22 |
Swift) 프로그래머스 - 이중우선순위큐 (0) | 2023.08.04 |