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 문을 중지합니다.