본문 바로가기

프로그래머스 (Swift)/lv 1

[lv1] 대충 만든 자판

문제

 

내 정답 코드

import Foundation

func solution(_ keymap:[String], _ targets:[String]) -> [Int] {
    var targetDic:[Character:Int] = [:]
    
    for i in 0..<targets.count {
        for char in targets[i] {
            targetDic.updateValue(0, forKey: char)
        }
    }
    
    for i in 0..<keymap.count {
        for j in 0..<keymap[i].count {
            let char = keymap[i][keymap[i].index(keymap[i].startIndex, offsetBy: j)]
            if targetDic[char] == 0 || targetDic[char] ?? 0 > j+1 {
                targetDic[char] = j+1
            }
        }
    }
    
    var result : [Int] = []
    for i in 0..<targets.count {
        var blank = false
        var temp = 0
        for char in targets[i] {
            if targetDic[char]! == 0 {
                blank = true
                break
            }
            temp += targetDic[char]!
        }
        blank ? result.append(-1) : result.append(temp)
    }
    
    return result
}

 

#

1. 작성할 문자들로만 딕셔너리를 생성하고 0값을 기본으로 넣어준다.

2. keymap의 문자가 딕셔너리의 문자와 일치하면 해당 문자의 인덱스를 가져온다.

3. 딕셔너리의 value와 비교하여 0이면 할당해주고, 0이 아닌데 값이 크면 할당해준다.

4. 딕셔너리를 통해 작성 문자들이 몇 번 눌려야 되는지의 count를 구해 result 배열에 담아준다.

5. 작성 문자의 딕셔너리 값이 0이라면 -1을 배열에 담아주고, 계산을 끝낸다.

6. result를 반환한다.


배운 기술

'프로그래머스 (Swift) > lv 1' 카테고리의 다른 글

[lv1] 직사각형 별찍기  (0) 2024.10.08
[lv1] 하샤드 수  (0) 2024.10.02
[lv1] 행렬의 덧셈  (0) 2024.09.10
[lv1] 짝수와 홀수  (0) 2024.09.05
[lv1] 성격 유형 검사하기  (0) 2024.09.03