문자열 집합을 통해 나왔던 단어인지 확인하고, 지난 단어의 마지막 캐릭터를 이번 단어의 첫 번째 캐릭터와 일치하는지 체크하며 끝말잇기 여부를 확인하자. 딕셔너리를 통해 특정 인물의 몇 번째 차례인지 확인할 수 있는데, 배열로 해도 충분할 것 같다.
import Foundation
func solution(_ n:Int, _ words:[String]) -> [Int] {
var wordSet = Set<String>()
var wordDict = [Int:Int]()
var lastCharacter = words[0].first
for idx in 0..<words.count {
let word = words[idx]
let peopleOrder = idx % n + 1
let peopleCount = wordDict[peopleOrder] ?? 0
if lastCharacter == word.first {
lastCharacter = word.last
} else {
return [peopleOrder, peopleCount + 1]
}
if !wordSet.contains(word) {
wordSet.insert(word)
} else {
return [peopleOrder, peopleCount + 1]
}
wordDict[peopleOrder] = peopleCount + 1
}
return [0, 0]
}