Algorithm
[Swift] 프로그래머스 - 대충 만든 자판
배고픈개발자
2023. 7. 1. 10:45
import Foundation
func solution(_ keymap:[String], _ targets:[String]) -> [Int] {
var alphaDict: [Character : Int] = [:]
for string in keymap {
for (index, char) in string.enumerated() {
alphaDict[char] = min(alphaDict[char] ?? 100, index + 1)
}
}
var ans:[Int] = Array(repeating: 0, count: targets.count)
for (index, string) in targets.enumerated() {
for char in string {
guard let count = alphaDict[char] else {
ans[index] = -1
break
}
ans[index] += count
}
}
return ans
}
딕셔너리를 사용해서 알파벳의 index가 가장 작은 것을 저장해서 사용했습니다.
일단 keymap에서 string을 하나씩 빼줍니다.
그리고 string의 알파벳을 딕셔너리에 저장해주는데, 만약 이전에 저장된 값이 있으면 둘 중에 작은 값을 저장합니다. ( 만약 nil 값이면 최대 원소의 길이인 100과 비교)
딕셔너리를 만드셨으면 그 다음은 쉽습니다.
일단 정답을 저장할 배열을 생성합니다.
만약 targets의 길이가 2라면 기본값이 0인 [0, 0] 배열을 만들어줍니다.
target에서 string을 하나씩 빼줍니다.
그리고 string의 알파벳이 딕셔너리에 저장돼 있다면 ans[index] 에 더해주고, 아니라면 ans[index]를 -1 로 바꾸고 for 문을 중지합니다.